{
  "version": 3,
  "sources": ["../../../node_modules/mri/lib/index.js", "../../../node_modules/sisteransi/src/index.js", "../../../node_modules/picocolors/picocolors.js", "../../../node_modules/@sentry/src/is.ts", "../../../node_modules/@sentry/src/string.ts", "../../../node_modules/@sentry/src/aggregate-errors.ts", "../../../node_modules/@sentry/src/worldwide.ts", "../../../node_modules/@sentry/src/browser.ts", "../../../node_modules/@sentry/src/logger.ts", "../../../node_modules/@sentry/src/dsn.ts", "../../../node_modules/@sentry/src/error.ts", "../../../node_modules/@sentry/src/object.ts", "../../../node_modules/@sentry/src/node-stack-trace.ts", "../../../node_modules/@sentry/src/stacktrace.ts", "../../../node_modules/@sentry/src/supports.ts", "../../../node_modules/@sentry/src/vendor/supportsHistory.ts", "../../../node_modules/@sentry/src/instrument.ts", "../../../node_modules/@sentry/src/memo.ts", "../../../node_modules/@sentry/src/misc.ts", "../../../node_modules/@sentry/src/env.ts", "../../../node_modules/@sentry/src/node.ts", "../../../node_modules/@sentry/src/normalize.ts", "../../../node_modules/@sentry/src/path.ts", "../../../node_modules/@sentry/src/syncpromise.ts", "../../../node_modules/@sentry/src/promisebuffer.ts", "../../../node_modules/@sentry/src/url.ts", "../../../node_modules/@sentry/src/requestdata.ts", "../../../node_modules/@sentry/src/severity.ts", "../../../node_modules/@sentry/src/time.ts", "../../../node_modules/@sentry/src/baggage.ts", "../../../node_modules/@sentry/src/tracing.ts", "../../../node_modules/@sentry/src/envelope.ts", "../../../node_modules/@sentry/src/clientreport.ts", "../../../node_modules/@sentry/src/ratelimit.ts", "../../../node_modules/@sentry/src/userIntegrations.ts", "../../../node_modules/@sentry/src/cache.ts", "../../../node_modules/@sentry/src/eventkhulnasoft.ts", "../../../node_modules/@sentry/src/vendor/escapeStringForRegex.ts", "../../../node_modules/@sentry/utils/cjs/index.js", "../../../node_modules/@sentry/src/constants.ts", "../../../node_modules/@sentry/src/session.ts", "../../../node_modules/@sentry/src/scope.ts", "../../../node_modules/@sentry/src/hub.ts", "../../../node_modules/@sentry/src/utils/hasTracingEnabled.ts", "../../../node_modules/@sentry/src/tracing/utils.ts", "../../../node_modules/@sentry/src/tracing/errors.ts", "../../../node_modules/@sentry/src/tracing/span.ts", "../../../node_modules/@sentry/src/tracing/dynamicSamplingContext.ts", "../../../node_modules/@sentry/src/tracing/transaction.ts", "../../../node_modules/@sentry/src/tracing/idletransaction.ts", "../../../node_modules/@sentry/src/tracing/hubextensions.ts", "../../../node_modules/@sentry/src/tracing/spanstatus.ts", "../../../node_modules/@sentry/src/tracing/trace.ts", "../../../node_modules/@sentry/src/tracing/measurement.ts", "../../../node_modules/@sentry/src/exports.ts", "../../../node_modules/@sentry/src/sessionflusher.ts", "../../../node_modules/@sentry/src/api.ts", "../../../node_modules/@sentry/src/envelope.ts", "../../../node_modules/@sentry/src/integration.ts", "../../../node_modules/@sentry/src/utils/prepareEvent.ts", "../../../node_modules/@sentry/src/baseclient.ts", "../../../node_modules/@sentry/src/checkin.ts", "../../../node_modules/@sentry/src/server-runtime-client.ts", "../../../node_modules/@sentry/src/sdk.ts", "../../../node_modules/@sentry/src/transports/base.ts", "../../../node_modules/@sentry/src/transports/offline.ts", "../../../node_modules/@sentry/src/transports/multiplexed.ts", "../../../node_modules/@sentry/src/version.ts", "../../../node_modules/@sentry/src/integrations/functiontostring.ts", "../../../node_modules/@sentry/src/integrations/inboundfilters.ts", "../../../node_modules/@sentry/core/cjs/integrations/index.js", "../../../node_modules/@sentry/src/metadata.ts", "../../../node_modules/@sentry/src/integrations/metadata.ts", "../../../node_modules/@sentry/core/cjs/index.js", "../../../node_modules/@sentry/src/buildPolyfills/_nullishCoalesce.ts", "../../../node_modules/@sentry/src/buildPolyfills/_asyncNullishCoalesce.ts", "../../../node_modules/@sentry/src/buildPolyfills/_asyncOptionalChain.ts", "../../../node_modules/@sentry/src/buildPolyfills/_asyncOptionalChainDelete.ts", "../../../node_modules/@sentry/src/buildPolyfills/_optionalChain.ts", "../../../node_modules/@sentry/src/buildPolyfills/_optionalChainDelete.ts", "../../../node_modules/@sentry/utils/cjs/buildPolyfills/index.js", "../../../node_modules/@sentry-internal/src/node/integrations/utils/node-utils.ts", "../../../node_modules/@sentry-internal/src/node/integrations/express.ts", "../../../node_modules/@sentry-internal/src/node/integrations/postgres.ts", "../../../node_modules/@sentry-internal/src/node/integrations/mysql.ts", "../../../node_modules/@sentry-internal/src/node/integrations/mongo.ts", "../../../node_modules/@sentry-internal/src/node/integrations/prisma.ts", "../../../node_modules/@sentry-internal/src/node/integrations/graphql.ts", "../../../node_modules/@sentry-internal/src/node/integrations/apollo.ts", "../../../node_modules/@sentry-internal/src/node/integrations/lazy.ts", "../../../node_modules/@sentry-internal/src/browser/types.ts", "../../../node_modules/@sentry-internal/src/browser/backgroundtab.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/bindReporter.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/generateUniqueID.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/getNavigationEntry.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/getActivationStart.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/initMetric.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/observe.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/onHidden.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/getCLS.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/lib/getVisibilityWatcher.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/getFID.ts", "../../../node_modules/@sentry-internal/src/browser/web-vitals/getLCP.ts", "../../../node_modules/@sentry-internal/src/browser/metrics/utils.ts", "../../../node_modules/@sentry-internal/src/browser/metrics/index.ts", "../../../node_modules/@sentry-internal/src/browser/request.ts", "../../../node_modules/@sentry-internal/src/browser/router.ts", "../../../node_modules/@sentry-internal/src/browser/browsertracing.ts", "../../../node_modules/@sentry-internal/src/extensions.ts", "../../../node_modules/@sentry-internal/tracing/cjs/index.js", "../../../node_modules/@sentry/src/tracing/index.ts", "../../../node_modules/@sentry/src/eventkhulnasoft.ts", "../../../node_modules/@sentry/src/client.ts", "../../../node_modules/ms/index.js", "../../../node_modules/debug/src/common.js", "../../../node_modules/debug/src/browser.js", "../../../node_modules/has-flag/index.js", "../../../node_modules/supports-color/index.js", "../../../node_modules/debug/src/node.js", "../../../node_modules/debug/src/index.js", "../../../node_modules/agent-base/src/promisify.ts", "../../../node_modules/agent-base/src/index.ts", "../../../node_modules/https-proxy-agent/src/parse-proxy-response.ts", "../../../node_modules/https-proxy-agent/src/agent.ts", "../../../node_modules/https-proxy-agent/src/index.ts", "../../../node_modules/@sentry/src/transports/http.ts", "../../../node_modules/@sentry/src/nodeVersion.ts", "../../../node_modules/@sentry/src/async/domain.ts", "../../../node_modules/@sentry/src/async/hooks.ts", "../../../node_modules/@sentry/src/async/index.ts", "../../../node_modules/@sentry/src/integrations/console.ts", "../../../node_modules/lru_map/lru.js", "../../../node_modules/@sentry/src/integrations/utils/http.ts", "../../../node_modules/@sentry/src/integrations/http.ts", "../../../node_modules/@sentry/src/integrations/utils/errorhandling.ts", "../../../node_modules/@sentry/src/integrations/onuncaughtexception.ts", "../../../node_modules/@sentry/src/integrations/onunhandledrejection.ts", "../../../node_modules/@sentry/src/integrations/linkederrors.ts", "../../../node_modules/@sentry/src/integrations/modules.ts", "../../../node_modules/@sentry/src/integrations/contextlines.ts", "../../../node_modules/@sentry/src/integrations/context.ts", "../../../node_modules/cookie/index.js", "../../../node_modules/@sentry/src/requestdata.ts", "../../../node_modules/@sentry/src/integrations/requestdata.ts", "../../../node_modules/@sentry/src/integrations/localvariables.ts", "../../../node_modules/@sentry/src/integrations/undici/index.ts", "../../../node_modules/@sentry/src/module.ts", "../../../node_modules/@sentry/src/sdk.ts", "../../../node_modules/@sentry/src/utils.ts", "../../../node_modules/@sentry/src/requestDataDeprecated.ts", "../../../node_modules/@sentry/src/handlers.ts", "../../../node_modules/@sentry/node/cjs/integrations/index.js", "../../../node_modules/@sentry/node/cjs/tracing/integrations.js", "../../../node_modules/@sentry/src/index.ts", "../../../node_modules/which-pm-runs/index.js", "../../../node_modules/json5/lib/unicode.js", "../../../node_modules/json5/lib/util.js", "../../../node_modules/json5/lib/parse.js", "../../../node_modules/json5/lib/stringify.js", "../../../node_modules/json5/lib/index.js", "../../../node_modules/compress-json/dist/debug.js", "../../../node_modules/compress-json/dist/number.js", "../../../node_modules/compress-json/dist/encode.js", "../../../node_modules/compress-json/dist/config.js", "../../../node_modules/compress-json/dist/memory.js", "../../../node_modules/compress-json/dist/core.js", "../../../node_modules/compress-json/dist/helpers.js", "../../../node_modules/compress-json/dist/index.js", "../../../node_modules/prompts/node_modules/kleur/index.js", "../../../node_modules/prompts/dist/util/action.js", "../../../node_modules/prompts/dist/util/strip.js", "../../../node_modules/prompts/dist/util/clear.js", "../../../node_modules/prompts/dist/util/figures.js", "../../../node_modules/prompts/dist/util/style.js", "../../../node_modules/prompts/dist/util/lines.js", "../../../node_modules/prompts/dist/util/wrap.js", "../../../node_modules/prompts/dist/util/entriesToDisplay.js", "../../../node_modules/prompts/dist/util/index.js", "../../../node_modules/prompts/dist/elements/prompt.js", "../../../node_modules/prompts/dist/elements/text.js", "../../../node_modules/prompts/dist/elements/select.js", "../../../node_modules/prompts/dist/elements/toggle.js", "../../../node_modules/prompts/dist/dateparts/datepart.js", "../../../node_modules/prompts/dist/dateparts/meridiem.js", "../../../node_modules/prompts/dist/dateparts/day.js", "../../../node_modules/prompts/dist/dateparts/hours.js", "../../../node_modules/prompts/dist/dateparts/milliseconds.js", "../../../node_modules/prompts/dist/dateparts/minutes.js", "../../../node_modules/prompts/dist/dateparts/month.js", "../../../node_modules/prompts/dist/dateparts/seconds.js", "../../../node_modules/prompts/dist/dateparts/year.js", "../../../node_modules/prompts/dist/dateparts/index.js", "../../../node_modules/prompts/dist/elements/date.js", "../../../node_modules/prompts/dist/elements/number.js", "../../../node_modules/prompts/dist/elements/multiselect.js", "../../../node_modules/prompts/dist/elements/autocomplete.js", "../../../node_modules/prompts/dist/elements/autocompleteMultiselect.js", "../../../node_modules/prompts/dist/elements/confirm.js", "../../../node_modules/prompts/dist/elements/index.js", "../../../node_modules/prompts/dist/prompts.js", "../../../node_modules/prompts/dist/index.js", "../../../node_modules/prompts/lib/util/action.js", "../../../node_modules/prompts/lib/util/strip.js", "../../../node_modules/prompts/lib/util/clear.js", "../../../node_modules/prompts/lib/util/figures.js", "../../../node_modules/prompts/lib/util/style.js", "../../../node_modules/prompts/lib/util/lines.js", "../../../node_modules/prompts/lib/util/wrap.js", "../../../node_modules/prompts/lib/util/entriesToDisplay.js", "../../../node_modules/prompts/lib/util/index.js", "../../../node_modules/prompts/lib/elements/prompt.js", "../../../node_modules/prompts/lib/elements/text.js", "../../../node_modules/prompts/lib/elements/select.js", "../../../node_modules/prompts/lib/elements/toggle.js", "../../../node_modules/prompts/lib/dateparts/datepart.js", "../../../node_modules/prompts/lib/dateparts/meridiem.js", "../../../node_modules/prompts/lib/dateparts/day.js", "../../../node_modules/prompts/lib/dateparts/hours.js", "../../../node_modules/prompts/lib/dateparts/milliseconds.js", "../../../node_modules/prompts/lib/dateparts/minutes.js", "../../../node_modules/prompts/lib/dateparts/month.js", "../../../node_modules/prompts/lib/dateparts/seconds.js", "../../../node_modules/prompts/lib/dateparts/year.js", "../../../node_modules/prompts/lib/dateparts/index.js", "../../../node_modules/prompts/lib/elements/date.js", "../../../node_modules/prompts/lib/elements/number.js", "../../../node_modules/prompts/lib/elements/multiselect.js", "../../../node_modules/prompts/lib/elements/autocomplete.js", "../../../node_modules/prompts/lib/elements/autocompleteMultiselect.js", "../../../node_modules/prompts/lib/elements/confirm.js", "../../../node_modules/prompts/lib/elements/index.js", "../../../node_modules/prompts/lib/prompts.js", "../../../node_modules/prompts/lib/index.js", "../../../node_modules/prompts/index.js", "../../../node_modules/highlight.js/lib/core.js", "../../../node_modules/@amplitude/analytics-node/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/@amplitude/analytics-core/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/@amplitude/analytics-types/src/event.ts", "../../../node_modules/@amplitude/analytics-types/src/logger.ts", "../../../node_modules/@amplitude/analytics-types/src/plugin.ts", "../../../node_modules/@amplitude/analytics-types/src/server-zone.ts", "../../../node_modules/@amplitude/analytics-types/src/status.ts", "../../../node_modules/@amplitude/analytics-types/src/transport.ts", "../../../node_modules/@amplitude/analytics-types/src/index.ts", "../../../node_modules/@amplitude/analytics-core/src/constants.ts", "../../../node_modules/@amplitude/analytics-core/src/utils/valid-properties.ts", "../../../node_modules/@amplitude/analytics-core/src/identify.ts", "../../../node_modules/@amplitude/analytics-core/src/utils/event-khulnasoft.ts", "../../../node_modules/@amplitude/analytics-core/src/utils/result-khulnasoft.ts", "../../../node_modules/@amplitude/analytics-core/src/timeline.ts", "../../../node_modules/@amplitude/analytics-core/src/messages.ts", "../../../node_modules/@amplitude/analytics-core/src/utils/return-wrapper.ts", "../../../node_modules/@amplitude/analytics-core/src/core-client.ts", "../../../node_modules/@amplitude/analytics-core/src/revenue.ts", "../../../node_modules/@amplitude/analytics-core/src/utils/chunk.ts", "../../../node_modules/@amplitude/analytics-core/src/logger.ts", "../../../node_modules/@amplitude/analytics-core/src/config.ts", "../../../node_modules/@amplitude/analytics-core/src/plugins/destination.ts", "../../../node_modules/@amplitude/analytics-core/src/utils/debug.ts", "../../../node_modules/@amplitude/analytics-core/src/utils/uuid.ts", "../../../node_modules/@amplitude/analytics-core/src/storage/memory.ts", "../../../node_modules/@amplitude/analytics-core/src/transports/base.ts", "../../../node_modules/@amplitude/analytics-core/src/index.ts", "../../../node_modules/@amplitude/analytics-node/src/version.ts", "../../../node_modules/@amplitude/analytics-node/src/plugins/context.ts", "../../../node_modules/@amplitude/analytics-node/src/transports/http.ts", "../../../node_modules/@amplitude/analytics-node/src/config.ts", "../../../node_modules/@amplitude/analytics-node/src/node-client.ts", "../../../node_modules/@amplitude/analytics-node/src/index.ts", "../../../node_modules/source-map-js/lib/base64.js", "../../../node_modules/source-map-js/lib/base64-vlq.js", "../../../node_modules/source-map-js/lib/util.js", "../../../node_modules/source-map-js/lib/array-set.js", "../../../node_modules/source-map-js/lib/mapping-list.js", "../../../node_modules/source-map-js/lib/source-map-generator.js", "../../../node_modules/source-map-js/lib/binary-search.js", "../../../node_modules/source-map-js/lib/quick-sort.js", "../../../node_modules/source-map-js/lib/source-map-consumer.js", "../../../node_modules/source-map-js/lib/source-node.js", "../../../node_modules/source-map-js/source-map.js", "../../../node_modules/@babel/parser/src/util/location.ts", "../../../node_modules/@babel/parser/src/parse-error/module-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/to-node-description.ts", "../../../node_modules/@babel/parser/src/parse-error/standard-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts", "../../../node_modules/@babel/parser/src/parse-error.ts", "../../../node_modules/@babel/parser/src/plugins/estree.ts", "../../../node_modules/@babel/parser/src/tokenizer/context.ts", "../../../node_modules/@babel/parser/src/tokenizer/types.ts", "../../../node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts", "../../../node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts", "../../../node_modules/@babel/parser/src/util/identifier.ts", "../../../node_modules/@babel/parser/src/util/scope.ts", "../../../node_modules/@babel/parser/src/plugins/flow/scope.ts", "../../../node_modules/@babel/parser/src/parser/base.ts", "../../../node_modules/@babel/parser/src/parser/comments.ts", "../../../node_modules/@babel/parser/src/util/whitespace.ts", "../../../node_modules/@babel/parser/src/tokenizer/state.ts", "../../../node_modules/@babel/babel-helper-string-parser/src/index.ts", "../../../node_modules/@babel/parser/src/tokenizer/index.ts", "../../../node_modules/@babel/parser/src/util/class-scope.ts", "../../../node_modules/@babel/parser/src/util/expression-scope.ts", "../../../node_modules/@babel/parser/src/util/production-parameter.ts", "../../../node_modules/@babel/parser/src/parser/util.ts", "../../../node_modules/@babel/parser/src/parser/node.ts", "../../../node_modules/@babel/parser/src/plugins/flow/index.ts", "../../../node_modules/@babel/parser/src/plugins/jsx/xhtml.ts", "../../../node_modules/@babel/parser/src/plugins/jsx/index.ts", "../../../node_modules/@babel/parser/src/plugins/typescript/scope.ts", "../../../node_modules/@babel/parser/src/parser/lval.ts", "../../../node_modules/@babel/parser/src/plugins/typescript/index.ts", "../../../node_modules/@babel/parser/src/plugins/placeholders.ts", "../../../node_modules/@babel/parser/src/plugins/v8intrinsic.ts", "../../../node_modules/@babel/parser/src/plugin-utils.ts", "../../../node_modules/@babel/parser/src/options.ts", "../../../node_modules/@babel/parser/src/parser/expression.ts", "../../../node_modules/@babel/parser/src/parser/statement.ts", "../../../node_modules/@babel/parser/src/parser/index.ts", "../../../node_modules/@babel/parser/src/index.ts", "../../../node_modules/fastest-levenshtein/mod.js", "../../../node_modules/isexe/windows.js", "../../../node_modules/isexe/mode.js", "../../../node_modules/isexe/index.js", "../../../node_modules/which/which.js", "../../../node_modules/path-key/index.js", "../../../node_modules/cross-spawn/lib/util/resolveCommand.js", "../../../node_modules/cross-spawn/lib/util/escape.js", "../../../node_modules/shebang-regex/index.js", "../../../node_modules/shebang-command/index.js", "../../../node_modules/cross-spawn/lib/util/readShebang.js", "../../../node_modules/cross-spawn/lib/parse.js", "../../../node_modules/cross-spawn/lib/enoent.js", "../../../node_modules/cross-spawn/index.js", "../../../packages/dev-tools/cli/index.ts", "../../../packages/dev-tools/cli/download.ts", "../../../packages/dev-tools/cli/prettier.ts", "../../../packages/dev-tools/cli/credentials.ts", "../../../packages/dev-tools/common/constants.ts", "../../../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js", "../../../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js", "../../../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js", "../../../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js", "../../../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js", "../../../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js", "../../../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js", "../../../node_modules/@clack/core/src/prompts/prompt.ts", "../../../node_modules/@clack/core/src/prompts/confirm.ts", "../../../node_modules/@clack/core/src/prompts/group-multiselect.ts", "../../../node_modules/@clack/core/src/prompts/multi-select.ts", "../../../node_modules/@clack/core/src/prompts/password.ts", "../../../node_modules/@clack/core/src/prompts/select.ts", "../../../node_modules/@clack/core/src/prompts/select-key.ts", "../../../node_modules/@clack/core/src/prompts/text.ts", "../../../node_modules/@clack/core/src/utils.ts", "../../../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js", "../../../node_modules/@clack/prompts/src/index.ts", "../../../packages/dev-tools/cli/figma-publish.ts", "../../../packages/dev-tools/common/fs.ts", "../../../packages/dev-tools/common/utils.ts", "../../../packages/dev-tools/core/detect-frameworks.ts", "../../../packages/dev-tools/common/cache.ts", "../../../packages/dev-tools/common/dotenv.ts", "../../../packages/dev-tools/core/adapters/next/next-api-key.ts", "../../../packages/dev-tools/types.ts", "../../../packages/dev-tools/common/ast/transform.ts", "../../../packages/dev-tools/common/ast/convert-values.ts", "../../../packages/dev-tools/common/ast/component-input-types.ts", "../../../packages/dev-tools/common/ast/component-info.ts", "../../../packages/dev-tools/core/adapters/next/next-component-info.ts", "../../../packages/dev-tools/common/typescript.ts", "../../../packages/dev-tools/common/ast/ensure-imports.ts", "../../../packages/dev-tools/common/ast/exported-statements.ts", "../../../packages/dev-tools/common/ast/utils.ts", "../../../packages/dev-tools/common/ast/app-dependencies.ts", "../../../packages/dev-tools/common/ast/imported-statements.ts", "../../../packages/dev-tools/core/adapters/react/react-components.ts", "../../../packages/dev-tools/core/adapters/next/next-components.ts", "../../../packages/dev-tools/common/ast/normalize-statements.ts", "../../../packages/dev-tools/core/adapters/next/next-registry-parse.ts", "../../../packages/dev-tools/common/ast/remove-unused-imports.ts", "../../../packages/dev-tools/common/ast/component-registry.ts", "../../../packages/dev-tools/core/adapters/react/react-ts-program.ts", "../../../packages/dev-tools/common/ast/ensure-array-statement.ts", "../../../packages/dev-tools/core/adapters/next/next-registry.ts", "../../../packages/dev-tools/core/adapters/next/next-ensure-khulnasoft-setup.ts", "../../../packages/dev-tools/core/adapters/react/react-khulnasoft-sdk-setup.ts", "../../../packages/dev-tools/core/adapters/next/index.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-api-key.ts", "../../../packages/dev-tools/common/ast/ensure-comments.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-components.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-component-source-inputs.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-ensure-khulnasoft-setup.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-registry-parse.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-ts-program.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-registry.ts", "../../../packages/dev-tools/core/adapters/qwik-city/index.ts", "../../../packages/dev-tools/core/adapters/remix/remix-api-key.ts", "../../../packages/dev-tools/core/adapters/remix/remix-components.ts", "../../../packages/dev-tools/core/adapters/remix/remix-registry-parse.ts", "../../../packages/dev-tools/core/adapters/remix/remix-registry.ts", "../../../packages/dev-tools/core/adapters/remix/remix-ensure-khulnasoft-setup.ts", "../../../packages/dev-tools/core/adapters/remix/index.ts", "../../../packages/dev-tools/core/adapters/react/react-api-key.ts", "../../../packages/dev-tools/core/adapters/react/react-component-info.ts", "../../../packages/dev-tools/core/adapters/react/react-registry-parse.ts", "../../../packages/dev-tools/core/adapters/react/react-registry.ts", "../../../packages/dev-tools/core/adapters/react/react-ensure-khulnasoft-setup.ts", "../../../packages/dev-tools/core/adapters/react/index.ts", "../../../packages/dev-tools/core/adapters/angular/angular-api-key.ts", "../../../packages/dev-tools/core/adapters/angular/angular-components.ts", "../../../packages/dev-tools/core/adapters/angular/angular-app-module-imports.ts", "../../../packages/dev-tools/core/adapters/angular/angular-app-routes-update.ts", "../../../packages/dev-tools/core/adapters/angular/angular-fix-tsconfig.ts", "../../../packages/dev-tools/core/adapters/angular/angular-ensure-khulnasoft-setup.ts", "../../../packages/dev-tools/core/adapters/angular/angular-registry-parse.ts", "../../../packages/dev-tools/core/adapters/angular/angular-registry.ts", "../../../packages/dev-tools/core/adapters/angular/index.ts", "../../../packages/dev-tools/core/import-export-registry.ts", "../../../packages/dev-tools/common/khulnasoft/khulnasoft-sdks.ts", "../../../packages/dev-tools/core/find-dependencies.ts", "../../../packages/dev-tools/core/create-dev-tools.ts", "../../../packages/dev-tools/core/ensure-config-plugin.ts", "../../../packages/dev-tools/cli/generate.ts", "../../../node_modules/highlight.js/es/languages/arduino.js", "../../../node_modules/highlight.js/es/languages/bash.js", "../../../node_modules/highlight.js/es/languages/c.js", "../../../node_modules/highlight.js/es/languages/cpp.js", "../../../node_modules/highlight.js/es/languages/csharp.js", "../../../node_modules/highlight.js/es/languages/css.js", "../../../node_modules/highlight.js/es/languages/diff.js", "../../../node_modules/highlight.js/es/languages/go.js", "../../../node_modules/highlight.js/es/languages/graphql.js", "../../../node_modules/highlight.js/es/languages/ini.js", "../../../node_modules/highlight.js/es/languages/java.js", "../../../node_modules/highlight.js/es/languages/javascript.js", "../../../node_modules/highlight.js/es/languages/json.js", "../../../node_modules/highlight.js/es/languages/kotlin.js", "../../../node_modules/highlight.js/es/languages/less.js", "../../../node_modules/highlight.js/es/languages/lua.js", "../../../node_modules/highlight.js/es/languages/makefile.js", "../../../node_modules/highlight.js/es/languages/markdown.js", "../../../node_modules/highlight.js/es/languages/objectivec.js", "../../../node_modules/highlight.js/es/languages/perl.js", "../../../node_modules/highlight.js/es/languages/php.js", "../../../node_modules/highlight.js/es/languages/php-template.js", "../../../node_modules/highlight.js/es/languages/plaintext.js", "../../../node_modules/highlight.js/es/languages/python.js", "../../../node_modules/highlight.js/es/languages/python-repl.js", "../../../node_modules/highlight.js/es/languages/r.js", "../../../node_modules/highlight.js/es/languages/ruby.js", "../../../node_modules/highlight.js/es/languages/rust.js", "../../../node_modules/highlight.js/es/languages/scss.js", "../../../node_modules/highlight.js/es/languages/shell.js", "../../../node_modules/highlight.js/es/languages/sql.js", "../../../node_modules/highlight.js/es/languages/swift.js", "../../../node_modules/highlight.js/es/languages/typescript.js", "../../../node_modules/highlight.js/es/languages/vbnet.js", "../../../node_modules/highlight.js/es/languages/wasm.js", "../../../node_modules/highlight.js/es/languages/xml.js", "../../../node_modules/highlight.js/es/languages/yaml.js", "../../../node_modules/lowlight/lib/common.js", "../../../node_modules/highlight.js/es/core.js", "../../../node_modules/lowlight/lib/index.js", "../../../node_modules/chalk/source/vendor/ansi-styles/index.js", "../../../node_modules/chalk/source/vendor/supports-color/index.js", "../../../node_modules/chalk/source/utilities.js", "../../../node_modules/chalk/source/index.js", "../../../node_modules/emphasize/lib/index.js", "../../../packages/dev-tools/cli/help.ts", "../../../packages/dev-tools/cli/track.ts", "../../../packages/dev-tools/package.json", "../../../packages/dev-tools/node/node-sys.ts", "../../../node_modules/magicast/dist/index.mjs", "../../../node_modules/uuid/dist/esm-node/rng.js", "../../../node_modules/uuid/dist/esm-node/stringify.js", "../../../node_modules/uuid/dist/esm-node/native.js", "../../../node_modules/uuid/dist/esm-node/v4.js", "../../../packages/dev-tools/cli/kv.ts", "../../../packages/dev-tools/cli/fetch.ts", "../../../packages/dev-tools/cli/exit.ts", "../../../packages/dev-tools/cli/constants.ts", "../../../packages/dev-tools/cli/figma.ts", "../../../packages/create-khulnasoft/install.ts", "../../../packages/dev-tools/cli/khulnasoft-add/interface.ts", "../../../packages/dev-tools/cli/khulnasoft-add/options.ts", "../../../packages/dev-tools/cli/sync-utils.ts", "../../../packages/dev-tools/server/dev-tools-http-server.ts", "../../../packages/dev-tools/common/node-request.ts", "../../../packages/dev-tools/common/khulnasoft/khulnasoft-api.ts", "../../../packages/dev-tools/common/khulnasoft/content-ids.ts", "../../../packages/dev-tools/common/khulnasoft/content-generation.ts", "../../../packages/dev-tools/server/khulnasoft-connect.ts", "../../../packages/dev-tools/server/dev-tools-api.ts", "../../../packages/dev-tools/server/client-script.ts", "../../../packages/dev-tools/server/auth.ts", "../../../packages/dev-tools/server/request-handler.ts", "../../../packages/dev-tools/server/create-dev-tools-server.ts", "../../../packages/dev-tools/server/index.ts", "../../../packages/dev-tools/cli/code.ts", "../../../node_modules/is-unicode-supported/index.js", "../../../packages/dev-tools/cli/spinner.ts", "../../../packages/dev-tools/cli/indexing.ts"],
  "sourcesContent": ["function toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nmodule.exports = function (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n", "'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n  to(x, y) {\n    if (!y) return `${CSI}${x + 1}G`;\n    return `${CSI}${y + 1};${x + 1}H`;\n  },\n  move(x, y) {\n    let ret = '';\n\n    if (x < 0) ret += `${CSI}${-x}D`;\n    else if (x > 0) ret += `${CSI}${x}C`;\n\n    if (y < 0) ret += `${CSI}${-y}A`;\n    else if (y > 0) ret += `${CSI}${y}B`;\n\n    return ret;\n  },\n  up: (count = 1) => `${CSI}${count}A`,\n  down: (count = 1) => `${CSI}${count}B`,\n  forward: (count = 1) => `${CSI}${count}C`,\n  backward: (count = 1) => `${CSI}${count}D`,\n  nextLine: (count = 1) => `${CSI}E`.repeat(count),\n  prevLine: (count = 1) => `${CSI}F`.repeat(count),\n  left: `${CSI}G`,\n  hide: `${CSI}?25l`,\n  show: `${CSI}?25h`,\n  save: `${ESC}7`,\n  restore: `${ESC}8`\n}\n\nconst scroll = {\n  up: (count = 1) => `${CSI}S`.repeat(count),\n  down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n  screen: `${CSI}2J`,\n  up: (count = 1) => `${CSI}1J`.repeat(count),\n  down: (count = 1) => `${CSI}J`.repeat(count),\n  line: `${CSI}2K`,\n  lineEnd: `${CSI}K`,\n  lineStart: `${CSI}1K`,\n  lines(count) {\n    let clear = '';\n    for (let i = 0; i < count; i++)\n      clear += this.line + (i < count - 1 ? cursor.up() : '');\n    if (count)\n      clear += cursor.left;\n    return clear;\n  }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n", "let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\nimport type { PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\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: unknown): wat is Error {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n  return objectToString.call(wat) === `[object ${className}]`;\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: unknown): boolean {\n  return isBuiltin(wat, '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: unknown): boolean {\n  return isBuiltin(wat, '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: unknown): boolean {\n  return isBuiltin(wat, '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: unknown): wat is string {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given value 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: unknown): 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: unknown): wat is Record<string, unknown> {\n  return isBuiltin(wat, '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: unknown): wat is PolymorphicEvent {\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: unknown): 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: unknown): wat is RegExp {\n  return isBuiltin(wat, '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): wat is PromiseLike<any> {\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: unknown): boolean {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isNaN(wat: unknown): boolean {\n  return typeof wat === 'number' && wat !== wat;\n}\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\ninterface VueViewModel {\n  // Vue3\n  __isVue?: boolean;\n  // Vue2\n  _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n", "import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\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.slice(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 lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\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, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\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 < lineLength) {\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      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\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 given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n  value: string,\n  pattern: RegExp | string,\n  requireExactStringMatch: boolean = false,\n): boolean {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n  testString: string,\n  patterns: Array<string | RegExp> = [],\n  requireExactStringMatch: boolean = false,\n): boolean {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n", "import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  maxValueLimit: number = 250,\n  key: string,\n  limit: number,\n  event: Event,\n  hint?: EventHint,\n): void {\n  if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException: Exception | undefined =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException as ExtendedError,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  limit: number,\n  error: ExtendedError,\n  key: string,\n  prevExceptions: Exception[],\n  exception: Exception,\n  exceptionId: number,\n): Exception[] {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    is_exception_group: true,\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception: Exception,\n  source: string,\n  exceptionId: number,\n  parentId: number | undefined,\n): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n", "/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Integration } from '@sentry/types';\n\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions  */\nexport interface InternalGlobal {\n  navigator?: { userAgent?: string };\n  console: Console;\n  Sentry?: {\n    Integrations?: Integration[];\n  };\n  onerror?: {\n    (msg: unknown, url: unknown, line: unknown, column: unknown, error: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  onunhandledrejection?: {\n    (event: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n    __SENTRY_LOADER__?: true;\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  SENTRY_SDK_SOURCE?: SdkSource;\n  /**\n   * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n   * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n   * file.\n   */\n  _sentryDebugIds?: Record<string, string>;\n  __SENTRY__: {\n    globalEventProcessors: any;\n    hub: any;\n    logger: any;\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n  /**\n   * Raw module metadata that is injected by bundler plugins.\n   *\n   * Keys are `error.stack` strings, values are the metadata.\n   */\n  _sentryModuleMetadata?: Record<string, any>;\n}\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj: { Math?: Math }): any | undefined {\n  return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ: InternalGlobal =\n  (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n  // eslint-disable-next-line no-restricted-globals\n  (typeof window == 'object' && isGlobalObj(window)) ||\n  (typeof self == 'object' && isGlobalObj(self)) ||\n  (typeof global == 'object' && isGlobalObj(global)) ||\n  (function (this: any) {\n    return this;\n  })() ||\n  {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nexport function getGlobalObject<T>(): T & InternalGlobal {\n  return GLOBAL_OBJ as T & InternalGlobal;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<T>(name: keyof InternalGlobal['__SENTRY__'], creator: () => T, obj?: unknown): T {\n  const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n  const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n  const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n  return singleton;\n}\n", "import { isString } from './is';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\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(\n  elem: unknown,\n  options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): 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 out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\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, keyAttrs?: string[]): 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\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs =\n    keyAttrs && keyAttrs.length\n      ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n      : null;\n\n  if (keyAttrPairs && keyAttrPairs.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\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  }\n  const allowedAttrs = ['aria-label', '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\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement<E = any>(selector: string): E | null {\n  if (WINDOW.document && WINDOW.document.querySelector) {\n    return WINDOW.document.querySelector(selector) as unknown as E;\n  }\n  return null;\n}\n", "import { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'] as const;\nexport type ConsoleLevel = (typeof CONSOLE_LEVELS)[number];\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record<ConsoleLevel, LoggerMethod>;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key in ConsoleLevel]?: (...args: any[]) => void;\n} = {};\n\n/** JSDoc */\ninterface Logger extends LoggerConsoleMethods {\n  disable(): void;\n  enable(): void;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console as Console;\n  const wrappedFuncs: Partial<LoggerConsoleMethods> = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n    wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n    console[level] = originalConsoleMethod;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] as LoggerMethod;\n    });\n  }\n}\n\nfunction makeLogger(): Logger {\n  let enabled = false;\n  const logger: Partial<Logger> = {\n    enable: () => {\n      enabled = true;\n    },\n    disable: () => {\n      enabled = false;\n    },\n  };\n\n  if (__DEBUG_BUILD__) {\n    CONSOLE_LEVELS.forEach(name => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      logger[name] = (...args: any[]) => {\n        if (enabled) {\n          consoleSandbox(() => {\n            GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n          });\n        }\n      };\n    });\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      logger[name] = () => undefined;\n    });\n  }\n\n  return logger as Logger;\n}\n\nexport const logger = makeLogger();\n", "import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n  return protocol === 'http' || protocol === 'https';\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 */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    // eslint-disable-next-line no-console\n    console.error(`Invalid Sentry Dsn: ${str}`);\n    return undefined;\n  }\n\n  const [protocol, publicKey, 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  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n  if (!__DEBUG_BUILD__) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n", "import type { ConsoleLevel } from './logger';\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 logLevel: ConsoleLevel;\n\n  public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n    super(message);\n\n    this.name = new.target.prototype.constructor.name;\n    // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n    // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n    // instances of `SentryError` fail `obj instanceof SentryError` checks.\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.logLevel = logLevel;\n  }\n}\n", "/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\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      markFunctionWrapped(wrapped, original);\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 * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: { [key: string]: unknown }, name: string, value: unknown): void {\n  Object.defineProperty(obj, name, {\n    // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n    value: value,\n    writable: true,\n    configurable: true,\n  });\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n  const proto = original.prototype || {};\n  wrapped.prototype = original.prototype = proto;\n  addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n  return func.__sentry_original__;\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 `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n *  an Error.\n */\nexport function convertToPlainObject<V>(value: V):\n  | {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    }\n  | {\n      [ownProps: string]: unknown;\n      message: string;\n      name: string;\n      stack?: string;\n    }\n  | V {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj: {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    } = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps: { [key: string]: unknown } = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj as Record<string, unknown>)[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\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 */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n  const keys = Object.keys(convertToPlainObject(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 a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoKhulnasoft doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map<unknown, unknown>();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoKhulnasoft` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n  if (isPlainObject(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: { [key: string]: any } = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.keys(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue as T;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: unknown[] = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item: unknown) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue as unknown as T;\n  }\n\n  return inputValue;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n  let objectified;\n  switch (true) {\n    case wat === undefined || wat === null:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat as any).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n", "// This code was originally forked from https://github.com/felixge/node-stack-trace\n// Since then it has been highly modified to fit our needs.\n\n// Copyright (c) 2011 Felix Geisendörfer (felix@debuggable.com)//\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions://\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.//\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport type { StackLineParserFn } from '@sentry/types';\n\nexport type GetModuleFn = (filename: string | undefined) => string | undefined;\n\n/** Node Stack line parser */\n// eslint-disable-next-line complexity\nexport function node(getModule?: GetModuleFn): StackLineParserFn {\n  const FILENAME_MATCH = /^\\s*[-]{4,}$/;\n  const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n\n  // eslint-disable-next-line complexity\n  return (line: string) => {\n    const lineMatch = line.match(FULL_MATCH);\n\n    if (lineMatch) {\n      let object: string | undefined;\n      let method: string | undefined;\n      let functionName: string | undefined;\n      let typeName: string | undefined;\n      let methodName: string | undefined;\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1];\n\n        let methodStart = functionName.lastIndexOf('.');\n        if (functionName[methodStart - 1] === '.') {\n          methodStart--;\n        }\n\n        if (methodStart > 0) {\n          object = functionName.slice(0, methodStart);\n          method = functionName.slice(methodStart + 1);\n          const objectEnd = object.indexOf('.Module');\n          if (objectEnd > 0) {\n            functionName = functionName.slice(objectEnd + 1);\n            object = object.slice(0, objectEnd);\n          }\n        }\n        typeName = undefined;\n      }\n\n      if (method) {\n        typeName = object;\n        methodName = method;\n      }\n\n      if (method === '<anonymous>') {\n        methodName = undefined;\n        functionName = undefined;\n      }\n\n      if (functionName === undefined) {\n        methodName = methodName || '<anonymous>';\n        functionName = typeName ? `${typeName}.${methodName}` : methodName;\n      }\n\n      let filename = lineMatch[2] && lineMatch[2].startsWith('file://') ? lineMatch[2].slice(7) : lineMatch[2];\n      const isNative = lineMatch[5] === 'native';\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5];\n      }\n\n      const isInternal =\n        isNative ||\n        (filename &&\n          // It's not internal if it's an absolute linux path\n          !filename.startsWith('/') &&\n          // It's not internal if it's an absolute windows path\n          !filename.includes(':\\\\') &&\n          // It's not internal if the path is starting with a dot\n          !filename.startsWith('.') &&\n          // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n          !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)); // Schema from: https://stackoverflow.com/a/3641782\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\n      const in_app = !isInternal && filename !== undefined && !filename.includes('node_modules/');\n\n      return {\n        filename,\n        module: getModule ? getModule(filename) : undefined,\n        function: functionName,\n        lineno: parseInt(lineMatch[3], 10) || undefined,\n        colno: parseInt(lineMatch[4], 10) || undefined,\n        in_app,\n      };\n    }\n\n    if (line.match(FILENAME_MATCH)) {\n      return {\n        filename: line,\n      };\n    }\n\n    return undefined;\n  };\n}\n", "import type { StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nimport type { GetModuleFn } from './node-stack-trace';\nimport { node } from './node-stack-trace';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack: string, skipFirst: number = 0): StackFrame[] => {\n    const frames: StackFrame[] = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirst; i < lines.length; i++) {\n      const line = lines[i];\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames);\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the hub itself, making it:\n    //\n    //   Sentry.captureException()\n    //   getCurrentHub().captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || localStack[localStack.length - 1].filename,\n    function: frame.function || '?',\n  }));\n}\n\nconst 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\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)];\n}\n", "import { logger } from './logger';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nexport { supportsHistory } from './vendor/supportsHistory';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func: Function): boolean {\n  return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFetch(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement as unknown) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFetch(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      __DEBUG_BUILD__ &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' as ReferrerPolicy,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n", "// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n// Copyright (c) 2010-2016 Google, Inc. http://angularjs.org\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { getGlobalObject } from '../worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n  // NOTE: in Chrome App environment, touching history.pushState, *even inside\n  //       a try/catch block*, will cause Chrome to output an error to console.error\n  // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const chrome = (WINDOW as any).chrome;\n  const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n  const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n", "/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type {\n  HandlerDataFetch,\n  HandlerDataXhr,\n  SentryWrappedXMLHttpRequest,\n  SentryXhrData,\n  WrappedFunction,\n} from '@sentry/types';\n\nimport { isString } from './is';\nimport type { ConsoleLevel } from './logger';\nimport { CONSOLE_LEVELS, logger, originalConsoleMethods } from './logger';\nimport { fill } from './object';\nimport { getFunctionName } from './stacktrace';\nimport { supportsHistory, supportsNativeFetch } from './supports';\nimport { getGlobalObject, GLOBAL_OBJ } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v2__';\n\nexport type InstrumentHandlerType =\n  | 'console'\n  | 'dom'\n  | 'fetch'\n  | 'history'\n  | 'sentry'\n  | 'xhr'\n  | 'error'\n  | 'unhandledrejection';\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n *  - Console API\n *  - Fetch API\n *  - XHR API\n *  - History API\n *  - DOM API (click/typing)\n *  - Error API\n *  - UnhandledRejection API\n */\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Instruments given API */\nfunction instrument(type: InstrumentHandlerType): void {\n  if (instrumented[type]) {\n    return;\n  }\n\n  instrumented[type] = true;\n\n  switch (type) {\n    case 'console':\n      instrumentConsole();\n      break;\n    case 'dom':\n      instrumentDOM();\n      break;\n    case 'xhr':\n      instrumentXHR();\n      break;\n    case 'fetch':\n      instrumentFetch();\n      break;\n    case 'history':\n      instrumentHistory();\n      break;\n    case 'error':\n      instrumentError();\n      break;\n    case 'unhandledrejection':\n      instrumentUnhandledRejection();\n      break;\n    default:\n      __DEBUG_BUILD__ && logger.warn('unknown instrumentation type:', type);\n      return;\n  }\n}\n\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addInstrumentationHandler(type: InstrumentHandlerType, callback: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(callback);\n  instrument(type);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n  Object.keys(handlers).forEach(key => {\n    handlers[key as InstrumentHandlerType] = undefined;\n  });\n}\n\n/** JSDoc */\nfunction triggerHandlers(type: InstrumentHandlerType, data: any): void {\n  if (!type || !handlers[type]) {\n    return;\n  }\n\n  for (const handler of handlers[type] || []) {\n    try {\n      handler(data);\n    } catch (e) {\n      __DEBUG_BUILD__ &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\n/** JSDoc */\nfunction instrumentConsole(): void {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args: any[]): void {\n        triggerHandlers('console', { args, level });\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n\n/** JSDoc */\nfunction instrumentFetch(): void {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n    return function (...args: any[]): void {\n      const { method, url } = parseFetchArgs(args);\n\n      const handlerData: HandlerDataFetch = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: Date.now(),\n      };\n\n      triggerHandlers('fetch', {\n        ...handlerData,\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        (response: Response) => {\n          triggerHandlers('fetch', {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            response,\n          });\n          return response;\n        },\n        (error: Error) => {\n          triggerHandlers('fetch', {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            error,\n          });\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n  return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\nfunction getUrlFromResource(resource: FetchResource): string {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs as [FetchResource, object];\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg as FetchResource),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n\n/** JSDoc */\nexport function instrumentXHR(): void {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (!(WINDOW as any).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const url = args[1];\n      const xhrInfo: SentryXhrData = (this[SENTRY_XHR_DATA_KEY] = {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n        url: args[1],\n        request_headers: {},\n      });\n\n      // if Sentry key appears in URL, don't capture it as a request\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      if (isString(url) && xhrInfo.method === 'POST' && url.match(/sentry_key/)) {\n        this.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler: () => void = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (this.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = this.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          triggerHandlers('xhr', {\n            args: args as [string, string],\n            endTimestamp: Date.now(),\n            startTimestamp: Date.now(),\n            xhr: this,\n          } as HandlerDataXhr);\n        }\n      };\n\n      if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n        fill(this, 'onreadystatechange', function (original: WrappedFunction): Function {\n          return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: any[]): void {\n            onreadystatechangeHandler();\n            return original.apply(this, readyStateArgs);\n          };\n        });\n      } else {\n        this.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      fill(this, 'setRequestHeader', function (original: WrappedFunction): Function {\n        return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n          const [header, value] = setRequestHeaderArgs as [string, string];\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return original.apply(this, setRequestHeaderArgs);\n        };\n      });\n\n      return originalOpen.apply(this, args);\n    };\n  });\n\n  fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n    return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: any[]): void {\n      const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n      if (sentryXhrData && args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      triggerHandlers('xhr', {\n        args,\n        startTimestamp: Date.now(),\n        xhr: this,\n      });\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nlet lastHref: string;\n\n/** JSDoc */\nfunction instrumentHistory(): void {\n  if (!supportsHistory()) {\n    return;\n  }\n\n  const oldOnPopState = WINDOW.onpopstate;\n  WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: any[]): any {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n    triggerHandlers('history', {\n      from,\n      to,\n    });\n    if (oldOnPopState) {\n      // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n      // https://github.com/getsentry/sentry-javascript/issues/3344\n      // https://github.com/bugsnag/bugsnag-js/issues/469\n      try {\n        return oldOnPopState.apply(this, args);\n      } catch (_oO) {\n        // no-empty\n      }\n    }\n  };\n\n  /** @hidden */\n  function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n    return function (this: History, ...args: any[]): void {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n        triggerHandlers('history', {\n          from,\n          to,\n        });\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nconst debounceDuration = 1000;\nlet debounceTimerID: number | undefined;\nlet lastCapturedEvent: Event | undefined;\n\n/**\n * Decide whether the current event should finish the debounce of previously captured one.\n * @param previous previously captured event\n * @param current event to be captured\n */\nfunction shouldShortcircuitPreviousDebounce(previous: Event | undefined, current: Event): boolean {\n  // If there was no previous event, it should always be swapped for the new one.\n  if (!previous) {\n    return true;\n  }\n\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (previous.type !== current.type) {\n    return true;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (previous.target !== current.target) {\n      return true;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return false;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(event: Event): boolean {\n  // We are only interested in filtering `keypress` events for now.\n  if (event.type !== 'keypress') {\n    return false;\n  }\n\n  try {\n    const target = event.target as HTMLElement;\n\n    if (!target || !target.tagName) {\n      return true;\n    }\n\n    // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n    // e.g.tabbing through elements, hotkeys, etc.\n    if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n      return false;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction makeDOMEventHandler(handler: Function, globalListener: boolean = false): (event: Event) => void {\n  return (event: Event): void => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || lastCapturedEvent === event) {\n      return;\n    }\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event)) {\n      return;\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no debounce timer, it means that we can safely capture the new event and store it for future comparisons.\n    if (debounceTimerID === undefined) {\n      handler({\n        event: event,\n        name,\n        global: globalListener,\n      });\n      lastCapturedEvent = event;\n    }\n    // If there is a debounce awaiting, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    else if (shouldShortcircuitPreviousDebounce(lastCapturedEvent, event)) {\n      handler({\n        event: event,\n        name,\n        global: globalListener,\n      });\n      lastCapturedEvent = event;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      debounceTimerID = undefined;\n    }, debounceDuration);\n  };\n}\n\ntype AddEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n  __sentry_instrumentation_handlers__?: {\n    [key in 'click' | 'keypress']?: {\n      handler?: Function;\n      /** The number of custom listeners attached to this element */\n      refCount: number;\n    };\n  };\n};\n\n/** JSDoc */\nexport function instrumentDOM(): void {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target: string) => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const proto = (WINDOW as any)[target] && (WINDOW as any)[target].prototype;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n    if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n      return function (\n        this: Element,\n        type: string,\n        listener: EventListenerOrEventListenerObject,\n        options?: boolean | AddEventListenerOptions,\n      ): AddEventListener {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const el = this as InstrumentedElement;\n            const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch (e) {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n        return function (\n          this: Element,\n          type: string,\n          listener: EventListenerOrEventListenerObject,\n          options?: boolean | EventListenerOptions,\n        ): () => void {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const el = this as InstrumentedElement;\n              const handlers = el.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete el.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch (e) {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\nlet _oldOnErrorHandler: (typeof WINDOW)['onerror'] | null = null;\n/** JSDoc */\nfunction instrumentError(): void {\n  _oldOnErrorHandler = WINDOW.onerror;\n\n  WINDOW.onerror = function (msg: unknown, url: unknown, line: unknown, column: unknown, error: unknown): boolean {\n    triggerHandlers('error', {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    });\n\n    if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  WINDOW.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nlet _oldOnUnhandledRejectionHandler: (typeof WINDOW)['onunhandledrejection'] | null = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection(): void {\n  _oldOnUnhandledRejectionHandler = WINDOW.onunhandledrejection;\n\n  WINDOW.onunhandledrejection = function (e: any): boolean {\n    triggerHandlers('unhandledrejection', e);\n\n    if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  WINDOW.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n  // memoize\n  (obj: any) => boolean,\n  // unmemoize\n  (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoKhulnasoft(): MemoFunc {\n  const hasWeakSet = typeof WeakSet === 'function';\n  const inner: any = hasWeakSet ? new WeakSet() : [];\n  function memoize(obj: any): boolean {\n    if (hasWeakSet) {\n      if (inner.has(obj)) {\n        return true;\n      }\n      inner.add(obj);\n      return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < inner.length; i++) {\n      const value = inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    inner.push(obj);\n    return false;\n  }\n\n  function unmemoize(obj: any): void {\n    if (hasWeakSet) {\n      inner.delete(obj);\n    } else {\n      for (let i = 0; i < inner.length; i++) {\n        if (inner[i] === obj) {\n          inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n  return [memoize, unmemoize];\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n  getRandomValues(array: Uint8Array): Uint8Array;\n  randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n  msCrypto?: CryptoInternal;\n  crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n  const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n  const crypto = gbl.crypto || gbl.msCrypto;\n\n  let getRandomByte = (): number => Math.random() * 16;\n  try {\n    if (crypto && crypto.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto && crypto.getRandomValues) {\n      getRandomByte = () => crypto.getRandomValues(new Uint8Array(1))[0];\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n  return event.exception && event.exception.values ? event.exception.values[0] : undefined;\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  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\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  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(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\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  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.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 * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (exception && (exception as any).__sentry_captured__) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify<T = unknown>(maybeArray: T | T[]): T[] {\n  return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n", "/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n  // @ts-expect-error __SENTRY_SDK_SOURCE__ is injected by rollup during build process\n  return __SENTRY_SDK_SOURCE__;\n}\n", "/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\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  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !isBrowserBundle() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\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, @typescript-eslint/no-explicit-any\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/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule<T>(moduleName: string): T | undefined {\n  let mod: T | undefined;\n\n  try {\n    mod = dynamicRequire(module, moduleName);\n  } catch (e) {\n    // no-empty\n  }\n\n  try {\n    const { cwd } = dynamicRequire(module, 'process');\n    mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;\n  } catch (e) {\n    // no-empty\n  }\n\n  return mod;\n}\n", "import type { Primitive } from '@sentry/types';\n\nimport { isNaN, isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoKhulnasoft } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key: string,\n  value: unknown,\n  depth: number = +Infinity,\n  maxProperties: number = +Infinity,\n  memo: MemoFunc = memoKhulnasoft(),\n): Primitive | ObjOrArray<unknown> {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n  ) {\n    return value as Primitive;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n    return value as ObjOrArray<unknown>;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n// TODO remove this in v7 (this means the method will no longer be exported, under any name)\nexport { visit as walk };\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key: unknown,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value: Exclude<unknown, string | number | boolean | null>,\n): string {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\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 (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n  const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n  return prototype ? prototype.constructor.name : 'null prototype';\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 */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n", "// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://github.com/calvinmetcalf/rollup-plugin-node-builtins/blob/63ab8aacd013767445ca299e468d9a60a95328d7/src/es6/path.js\n//\n// Copyright Joyent, Inc.and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\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      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\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\\S]*?)((?:\\.{1,2}|[^/\\\\]+?|)(\\.[^./\\\\]*|))(?:[/\\\\]*)$/;\n/** JSDoc */\nfunction splitPath(filename: string): string[] {\n  // Truncate files names greater than 1024 characters to avoid regex dos\n  // https://github.com/getsentry/sentry-javascript/pull/8737#discussion_r1285719172\n  const truncated = filename.length > 1024 ? `<truncated>${filename.slice(-1024)}` : filename;\n  const parts = splitPathRe.exec(truncated);\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).slice(1);\n  to = resolve(to).slice(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.slice(-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.slice(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.slice(ext.length * -1) === ext) {\n    f = f.slice(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 */\nconst enum States {\n  /** Pending */\n  PENDING = 0,\n  /** Resolved / OK */\n  RESOLVED = 1,\n  /** Rejected / Error */\n  REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\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;\n  private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n  private _value: any;\n\n  public constructor(\n    executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n  ) {\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\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._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result as any);\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\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  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      void (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  /** 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[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        handler[1](this._value as unknown as any);\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  };\n}\n\nexport { SyncPromise };\n", "import { SentryError } from './error';\nimport { rejectedSyncPromise, resolvedSyncPromise, SyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer<T> {\n  // exposes the internal array so tests can assert on the state of it.\n  // XXX: this really should not be public api.\n  $: Array<PromiseLike<T>>;\n  add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n  drain(timeout?: number): PromiseLike<boolean>;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit?: number): PromiseBuffer<T> {\n  const buffer: Array<PromiseLike<T>> = [];\n\n  function isReady(): boolean {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task: PromiseLike<T>): PromiseLike<T> {\n    return buffer.splice(buffer.indexOf(task), 1)[0];\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise<boolean>((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n", "type PartialURL = {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n  search?: string;\n  hash?: string;\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(url: string): PartialURL {\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    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\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\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    (host &&\n      host\n        // Always filter out authority\n        .replace(/^.*@/, '[filtered]:[filtered]@')\n        // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n        .replace(':80', '')\n        .replace(':443', '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n", "// TODO: Remove this file once equivalent integration is used everywhere\n\n/* eslint-disable complexity */\n/**\n * The functions here, which enrich an event with request data, are mostly for use in Node, but are safe for use in a\n * browser context. They live here in `@sentry/utils` rather than in `@sentry/node` so that they can be used in\n * frameworks (like nextjs), which, because of SSR, run the same code in both Node and browser contexts.\n *\n * TODO (v8 / #5257): Remove the note below\n * Note that for now, the tests for this code have to live in `@sentry/node`, since they test both these functions and\n * the backwards-compatibility-preserving wrappers which still live in `handlers.ts` there.\n */\n\n/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type {\n  Event,\n  ExtractedNodeRequestData,\n  PolymorphicRequest,\n  Transaction,\n  TransactionSource,\n} from '@sentry/types';\n\nimport { isPlainObject, isString } from './is';\nimport { normalize } from './normalize';\nimport { stripUrlQueryAndFragment } from './url';\n\nconst DEFAULT_INCLUDES = {\n  ip: false,\n  request: true,\n  transaction: true,\n  user: true,\n};\nconst DEFAULT_REQUEST_INCLUDES = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'];\nconst DEFAULT_USER_INCLUDES = ['id', 'username', 'email'];\n\ntype InjectedNodeDeps = {\n  cookie: {\n    parse: (cookieStr: string) => Record<string, string>;\n  };\n  url: {\n    parse: (urlStr: string) => {\n      query: string | null;\n    };\n  };\n};\n\n/**\n * Sets parameterized route as transaction name e.g.: `GET /users/:id`\n * Also adds more context data on the transaction from the request\n */\nexport function addRequestDataToTransaction(\n  transaction: Transaction | undefined,\n  req: PolymorphicRequest,\n  deps?: InjectedNodeDeps,\n): void {\n  if (!transaction) return;\n  if (!transaction.metadata.source || transaction.metadata.source === 'url') {\n    // Attempt to grab a parameterized route off of the request\n    transaction.setName(...extractPathForTransaction(req, { path: true, method: true }));\n  }\n  transaction.setData('url', req.originalUrl || req.url);\n  if (req.baseUrl) {\n    transaction.setData('baseUrl', req.baseUrl);\n  }\n  transaction.setData('query', extractQueryParams(req, deps));\n}\n\n/**\n * Extracts a complete and parameterized path from the request object and uses it to construct transaction name.\n * If the parameterized transaction name cannot be extracted, we fall back to the raw URL.\n *\n * Additionally, this function determines and returns the transaction name source\n *\n * eg. GET /mountpoint/user/:id\n *\n * @param req A request object\n * @param options What to include in the transaction name (method, path, or a custom route name to be\n *                used instead of the request's route)\n *\n * @returns A tuple of the fully constructed transaction name [0] and its source [1] (can be either 'route' or 'url')\n */\nexport function extractPathForTransaction(\n  req: PolymorphicRequest,\n  options: { path?: boolean; method?: boolean; customRoute?: string } = {},\n): [string, TransactionSource] {\n  const method = req.method && req.method.toUpperCase();\n\n  let path = '';\n  let source: TransactionSource = 'url';\n\n  // Check to see if there's a parameterized route we can use (as there is in Express)\n  if (options.customRoute || req.route) {\n    path = options.customRoute || `${req.baseUrl || ''}${req.route && req.route.path}`;\n    source = 'route';\n  }\n\n  // Otherwise, just take the original URL\n  else if (req.originalUrl || req.url) {\n    path = stripUrlQueryAndFragment(req.originalUrl || req.url || '');\n  }\n\n  let name = '';\n  if (options.method && method) {\n    name += method;\n  }\n  if (options.method && options.path) {\n    name += ' ';\n  }\n  if (options.path && path) {\n    name += path;\n  }\n\n  return [name, source];\n}\n\ntype TransactionNamingScheme = 'path' | 'methodPath' | 'handler';\n\n/** JSDoc */\nfunction extractTransaction(req: PolymorphicRequest, type: boolean | TransactionNamingScheme): string {\n  switch (type) {\n    case 'path': {\n      return extractPathForTransaction(req, { path: true })[0];\n    }\n    case 'handler': {\n      return (req.route && req.route.stack && req.route.stack[0] && req.route.stack[0].name) || '<anonymous>';\n    }\n    case 'methodPath':\n    default: {\n      return extractPathForTransaction(req, { path: true, method: true })[0];\n    }\n  }\n}\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_INCLUDES;\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 * Normalize data from the request object, accounting for framework differences.\n *\n * @param req The request object from which to extract data\n * @param options.include An optional array of keys to include in the normalized data. Defaults to\n * DEFAULT_REQUEST_INCLUDES if not provided.\n * @param options.deps Injected, platform-specific dependencies\n * @returns An object containing normalized request data\n */\nexport function extractRequestData(\n  req: PolymorphicRequest,\n  options?: {\n    include?: string[];\n    deps?: InjectedNodeDeps;\n  },\n): ExtractedNodeRequestData {\n  const { include = DEFAULT_REQUEST_INCLUDES, deps } = options || {};\n  const requestData: { [key: string]: any } = {};\n\n  // headers:\n  //   node, express, koa, nextjs: req.headers\n  const headers = (req.headers || {}) as {\n    host?: string;\n    cookie?: string;\n  };\n  // method:\n  //   node, express, koa, nextjs: 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, nextjs: req.headers.host\n  const host = req.hostname || req.host || headers.host || '<no host>';\n  // protocol:\n  //   node, nextjs: <n/a>\n  //   express, koa: req.protocol\n  const protocol = req.protocol === 'https' || (req.socket && req.socket.encrypted) ? 'https' : 'http';\n  // url (including path and query string):\n  //   node, express: req.originalUrl\n  //   koa, nextjs: req.url\n  const originalUrl = req.originalUrl || req.url || '';\n  // absolute url\n  const absoluteUrl = `${protocol}://${host}${originalUrl}`;\n  include.forEach(key => {\n    switch (key) {\n      case 'headers': {\n        requestData.headers = headers;\n        break;\n      }\n      case 'method': {\n        requestData.method = method;\n        break;\n      }\n      case 'url': {\n        requestData.url = absoluteUrl;\n        break;\n      }\n      case 'cookies': {\n        // cookies:\n        //   node, express, koa: req.headers.cookie\n        //   vercel, sails.js, express (w/ cookie middleware), nextjs: req.cookies\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        requestData.cookies =\n          // TODO (v8 / #5257): We're only sending the empty object for backwards compatibility, so the last bit can\n          // come off in v8\n          req.cookies || (headers.cookie && deps && deps.cookie && deps.cookie.parse(headers.cookie)) || {};\n        break;\n      }\n      case 'query_string': {\n        // query string:\n        //   node: req.url (raw)\n        //   express, koa, nextjs: req.query\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        requestData.query_string = extractQueryParams(req, deps);\n        break;\n      }\n      case 'data': {\n        if (method === 'GET' || method === 'HEAD') {\n          break;\n        }\n        // body data:\n        //   express, koa, nextjs: req.body\n        //\n        //   when using node by itself, you have to read the incoming stream(see\n        //   https://nodejs.dev/learn/get-http-request-body-data-using-nodejs); if a user is doing that, we can't know\n        //   where they're going to store the final result, so they'll have to capture this data themselves\n        if (req.body !== undefined) {\n          requestData.data = isString(req.body) ? req.body : JSON.stringify(normalize(req.body));\n        }\n        break;\n      }\n      default: {\n        if ({}.hasOwnProperty.call(req, key)) {\n          requestData[key] = (req as { [key: string]: any })[key];\n        }\n      }\n    }\n  });\n\n  return requestData;\n}\n\n/**\n * Options deciding what parts of the request to use when enhancing an event\n */\nexport interface AddRequestDataToEventOptions {\n  /** Flags controlling whether each type of data should be added to the event */\n  include?: {\n    ip?: boolean;\n    request?: boolean | string[];\n    transaction?: boolean | TransactionNamingScheme;\n    user?: boolean | string[];\n  };\n\n  /** Injected platform-specific dependencies */\n  deps?: {\n    cookie: {\n      parse: (cookieStr: string) => Record<string, string>;\n    };\n    url: {\n      parse: (urlStr: string) => {\n        query: string | null;\n      };\n    };\n  };\n}\n\n/**\n * Add data from the given request to the given event\n *\n * @param event The event to which the request data will be added\n * @param req Request object\n * @param options.include Flags to control what data is included\n * @param options.deps Injected platform-specific dependencies\n * @hidden\n */\nexport function addRequestDataToEvent(\n  event: Event,\n  req: PolymorphicRequest,\n  options?: AddRequestDataToEventOptions,\n): Event {\n  const include = {\n    ...DEFAULT_INCLUDES,\n    ...(options && options.include),\n  };\n\n  if (include.request) {\n    const extractedRequestData = Array.isArray(include.request)\n      ? extractRequestData(req, { include: include.request, deps: options && options.deps })\n      : extractRequestData(req, { deps: options && options.deps });\n\n    event.request = {\n      ...event.request,\n      ...extractedRequestData,\n    };\n  }\n\n  if (include.user) {\n    const extractedUser = req.user && isPlainObject(req.user) ? extractUserData(req.user, include.user) : {};\n\n    if (Object.keys(extractedUser).length) {\n      event.user = {\n        ...event.user,\n        ...extractedUser,\n      };\n    }\n  }\n\n  // client ip:\n  //   node, nextjs: req.socket.remoteAddress\n  //   express, koa: req.ip\n  if (include.ip) {\n    const ip = req.ip || (req.socket && req.socket.remoteAddress);\n    if (ip) {\n      event.user = {\n        ...event.user,\n        ip_address: ip,\n      };\n    }\n  }\n\n  if (include.transaction && !event.transaction) {\n    // TODO do we even need this anymore?\n    // TODO make this work for nextjs\n    event.transaction = extractTransaction(req, include.transaction);\n  }\n\n  return event;\n}\n\nfunction extractQueryParams(\n  req: PolymorphicRequest,\n  deps?: InjectedNodeDeps,\n): string | Record<string, unknown> | undefined {\n  // url (including path and query string):\n  //   node, express: req.originalUrl\n  //   koa, nextjs: req.url\n  let originalUrl = req.originalUrl || req.url || '';\n\n  if (!originalUrl) {\n    return;\n  }\n\n  // The `URL` constructor can't handle internal URLs of the form `/some/path/here`, so stick a dummy protocol and\n  // hostname on the beginning. Since the point here is just to grab the query string, it doesn't matter what we use.\n  if (originalUrl.startsWith('/')) {\n    originalUrl = `http://dogs.are.great${originalUrl}`;\n  }\n\n  return (\n    req.query ||\n    (typeof URL !== undefined && new URL(originalUrl).search.replace('?', '')) ||\n    // In Node 8, `URL` isn't in the global scope, so we have to use the built-in module from Node\n    (deps && deps.url && deps.url.parse(originalUrl).query) ||\n    undefined\n  );\n}\n", "/* eslint-disable deprecation/deprecation */\nimport type { Severity, SeverityLevel } from '@sentry/types';\n\n// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nexport const validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nexport function severityFromString(level: Severity | SeverityLevel | string): Severity {\n  return severityLevelFromString(level) as Severity;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n  return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') as SeverityLevel;\n}\n", "import { dynamicRequire, isNodeEnv } from './node';\nimport { getGlobalObject } from './worldwide';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject<Window>();\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 } = 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: () => number = 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: () => number = timestampSource.nowSeconds.bind(timestampSource);\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\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 * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\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  // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n  // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n  // data as reliable if they are within a reasonable threshold of the current time.\n\n  const { performance } = WINDOW;\n  if (!performance || !performance.now) {\n    _browserPerformanceTimeOriginMode = 'none';\n    return undefined;\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\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  const navigationStart = performance.timing && performance.timing.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      _browserPerformanceTimeOriginMode = 'timeOrigin';\n      return performance.timeOrigin;\n    } else {\n      _browserPerformanceTimeOriginMode = 'navigationStart';\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  _browserPerformanceTimeOriginMode = 'dateNow';\n  return dateNow;\n})();\n", "import type { DynamicSamplingContext } from '@sentry/types';\n\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const BAGGAGE_HEADER_NAME = 'baggage';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n  if (!isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n    return undefined;\n  }\n\n  // Intermediary object to store baggage key value pairs of incoming baggage headers on.\n  // It is later used to read Sentry-DSC-values from.\n  let baggageObject: Readonly<Record<string, string>> = {};\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    baggageObject = baggageHeader.reduce<Record<string, string>>((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      return {\n        ...acc,\n        ...currBaggageObject,\n      };\n    }, {});\n  } else {\n    // Return undefined if baggage header is an empty string (technically an empty baggage header is not spec conform but\n    // this is how we choose to handle it)\n    if (!baggageHeader) {\n      return undefined;\n    }\n\n    baggageObject = baggageHeaderToObject(baggageHeader);\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((acc, [key, value]) => {\n    if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n    .reduce<Record<string, string>>((acc, [key, value]) => {\n      acc[key] = value;\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object: Record<string, string>): string | undefined {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\n\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      __DEBUG_BUILD__ &&\n        logger.warn(\n          `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n        );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, '');\n}\n", "import type { DynamicSamplingContext, PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\nexport const TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled: boolean | undefined;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Create tracing context from incoming headers.\n */\nexport function tracingContextFromHeaders(\n  sentryTrace: Parameters<typeof extractTraceparentData>[0],\n  baggage: Parameters<typeof baggageHeaderToDynamicSamplingContext>[0],\n): {\n  traceparentData: ReturnType<typeof extractTraceparentData>;\n  dynamicSamplingContext: ReturnType<typeof baggageHeaderToDynamicSamplingContext>;\n  propagationContext: PropagationContext;\n} {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n  const propagationContext: PropagationContext = {\n    traceId: traceId || uuid4(),\n    spanId: uuid4().substring(16),\n    sampled: parentSampled,\n  };\n\n  if (parentSpanId) {\n    propagationContext.parentSpanId = parentSpanId;\n  }\n\n  if (dynamicSamplingContext) {\n    propagationContext.dsc = dynamicSamplingContext as DynamicSamplingContext;\n  }\n\n  return {\n    traceparentData,\n    dynamicSamplingContext,\n    propagationContext,\n  };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n  traceId: string = uuid4(),\n  spanId: string = uuid4().substring(16),\n  sampled?: boolean,\n): string {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n", "import type {\n  Attachment,\n  AttachmentItem,\n  BaseEnvelopeHeaders,\n  BaseEnvelopeItemHeaders,\n  DataCategory,\n  DsnComponents,\n  Envelope,\n  EnvelopeItemType,\n  Event,\n  EventEnvelopeHeaders,\n  SdkInfo,\n  SdkMetadata,\n  TextEncoderInternal,\n} from '@sentry/types';\n\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { dropUndefinedKeys } from './object';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope<E extends Envelope>(headers: E[0], items: E[1] = []): E {\n  return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope<E extends Envelope>(envelope: E, newItem: E[1][number]): E {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem<E extends Envelope>(\n  envelope: Envelope,\n  callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8.\n */\nfunction encodeUTF8(input: string, textEncoder?: TextEncoderInternal): Uint8Array {\n  const utf8 = textEncoder || new TextEncoder();\n  return utf8.encode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope, textEncoder?: TextEncoderInternal): string | Uint8Array {\n  const [envHeaders, items] = envelope;\n\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n  function append(next: string | Uint8Array): void {\n    if (typeof parts === 'string') {\n      parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];\n    } else {\n      parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);\n    }\n  }\n\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload: string;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch (e) {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n\n  return merged;\n}\n\nexport interface TextDecoderInternal {\n  decode(input?: Uint8Array): string;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(\n  env: string | Uint8Array,\n  textEncoder: TextEncoderInternal,\n  textDecoder: TextDecoderInternal,\n): Envelope {\n  let buffer = typeof env === 'string' ? textEncoder.encode(env) : env;\n\n  function readBinary(length: number): Uint8Array {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson<T>(): T {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(textDecoder.decode(readBinary(i))) as T;\n  }\n\n  const envelopeHeader = readJson<BaseEnvelopeHeaders>();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items: [any, any][] = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson<BaseEnvelopeItemHeaders>();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(\n  attachment: Attachment,\n  textEncoder?: TextEncoderInternal,\n): AttachmentItem {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;\n\n  return [\n    dropUndefinedKeys({\n      type: 'attachment',\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType,\n    }),\n    buffer,\n  ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP: Record<EnvelopeItemType, DataCategory> = {\n  session: 'session',\n  sessions: 'session',\n  attachment: 'attachment',\n  transaction: 'transaction',\n  event: 'error',\n  client_report: 'internal',\n  user_report: 'default',\n  profile: 'profile',\n  replay_event: 'replay',\n  replay_recording: 'replay',\n  check_in: 'monitor',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n  return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n  if (!metadataOrEvent || !metadataOrEvent.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n  event: Event,\n  sdkInfo: SdkInfo | undefined,\n  tunnel: string | undefined,\n  dsn: DsnComponents,\n): EventEnvelopeHeaders {\n  const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n  return {\n    event_id: event.event_id as string,\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && { dsn: dsnToString(dsn) }),\n    ...(dynamicSamplingContext && {\n      trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n    }),\n  };\n}\n", "import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n  discarded_events: ClientReport['discarded_events'],\n  dsn?: string,\n  timestamp?: number,\n): ClientReportEnvelope {\n  const clientReportItem: ClientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope<ClientReportEnvelope>(dsn ? { dsn } : {}, [clientReportItem]);\n}\n", "import type { TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\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 DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, category: string): number {\n  return limits[category] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, category: string, now: number = Date.now()): boolean {\n  return disabledUntil(limits, category) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n  limits: RateLimits,\n  { statusCode, headers }: TransportMakeRequestResponse,\n  now: number = Date.now(),\n): RateLimits {\n  const updatedRateLimits: RateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n  const retryAfterHeader = headers && headers['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories] = limit.split(':', 2);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          updatedRateLimits[category] = now + delay;\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n", "import type { Integration } from '@sentry/types';\n\nexport type UserIntegrationsFunction = (integrations: Integration[]) => Integration[];\nexport type UserIntegrations = Integration[] | UserIntegrationsFunction;\nexport type IntegrationWithExclusionOption = Integration & {\n  /**\n   * Allow the user to exclude this integration by not returning it from a function provided as the `integrations` option\n   * in `Sentry.init()`. Meant to be used with default integrations, the idea being that if a user has actively filtered\n   * an integration out, we should be able to respect that choice if we wish.\n   */\n  allowExclusionByUser?: boolean;\n};\n\ntype ForcedIntegrationOptions = {\n  [keyPath: string]: unknown;\n};\n\n/**\n * Recursively traverses an object to update an existing nested key.\n * Note: The provided key path must include existing properties,\n * the function will not create objects while traversing.\n *\n * @param obj An object to update\n * @param value The value to update the nested key with\n * @param keyPath The path to the key to update ex. fizz.buzz.foo\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setNestedKey(obj: Record<string, any>, keyPath: string, value: unknown): void {\n  // Ex. foo.bar.zoop will extract foo and bar.zoop\n  const match = keyPath.match(/([a-z_]+)\\.(.*)/i);\n  // The match will be null when there's no more recursing to do, i.e., when we've reached the right level of the object\n  if (match === null) {\n    obj[keyPath] = value;\n  } else {\n    // `match[1]` is the initial segment of the path, and `match[2]` is the remainder of the path\n    const innerObj = obj[match[1]];\n    setNestedKey(innerObj, match[2], value);\n  }\n}\n\n/**\n * Enforces inclusion of a given integration with specified options in an integration array originally determined by the\n * user, by either including the given default instance or by patching an existing user instance with the given options.\n *\n * Ideally this would happen when integrations are set up, but there isn't currently a mechanism there for merging\n * options from a default integration instance with those from a user-provided instance of the same integration, only\n * for allowing the user to override a default instance entirely. (TODO: Fix that.)\n *\n * @param defaultIntegrationInstance An instance of the integration with the correct options already set\n * @param userIntegrations Integrations defined by the user.\n * @param forcedOptions Options with which to patch an existing user-derived instance on the integration.\n * @returns A final integrations array.\n */\nexport function addOrUpdateIntegration<T extends UserIntegrations>(\n  defaultIntegrationInstance: Integration,\n  userIntegrations: T,\n  forcedOptions: ForcedIntegrationOptions = {},\n): T {\n  return (\n    Array.isArray(userIntegrations)\n      ? addOrUpdateIntegrationInArray(defaultIntegrationInstance, userIntegrations, forcedOptions)\n      : addOrUpdateIntegrationInFunction(\n          defaultIntegrationInstance,\n          // Somehow TS can't figure out that not being an array makes this necessarily a function\n          userIntegrations as UserIntegrationsFunction,\n          forcedOptions,\n        )\n  ) as T;\n}\n\nfunction addOrUpdateIntegrationInArray(\n  defaultIntegrationInstance: Integration,\n  userIntegrations: Integration[],\n  forcedOptions: ForcedIntegrationOptions,\n): Integration[] {\n  const userInstance = userIntegrations.find(integration => integration.name === defaultIntegrationInstance.name);\n\n  if (userInstance) {\n    for (const [keyPath, value] of Object.entries(forcedOptions)) {\n      setNestedKey(userInstance, keyPath, value);\n    }\n\n    return userIntegrations;\n  }\n\n  return [...userIntegrations, defaultIntegrationInstance];\n}\n\nfunction addOrUpdateIntegrationInFunction(\n  defaultIntegrationInstance: IntegrationWithExclusionOption,\n  userIntegrationsFunc: UserIntegrationsFunction,\n  forcedOptions: ForcedIntegrationOptions,\n): UserIntegrationsFunction {\n  const wrapper: UserIntegrationsFunction = defaultIntegrations => {\n    const userFinalIntegrations = userIntegrationsFunc(defaultIntegrations);\n\n    // There are instances where we want the user to be able to prevent an integration from appearing at all, which they\n    // would do by providing a function which filters out the integration in question. If that's happened in one of\n    // those cases, don't add our default back in.\n    if (defaultIntegrationInstance.allowExclusionByUser) {\n      const userFinalInstance = userFinalIntegrations.find(\n        integration => integration.name === defaultIntegrationInstance.name,\n      );\n      if (!userFinalInstance) {\n        return userFinalIntegrations;\n      }\n    }\n\n    return addOrUpdateIntegrationInArray(defaultIntegrationInstance, userFinalIntegrations, forcedOptions);\n  };\n\n  return wrapper;\n}\n", "/**\n * Creates a cache that evicts keys in fifo order\n * @param size {Number}\n */\nexport function makeFifoCache<Key extends string, Value>(\n  size: number,\n): {\n  get: (key: Key) => Value | undefined;\n  add: (key: Key, value: Value) => void;\n  delete: (key: Key) => boolean;\n  clear: () => void;\n  size: () => number;\n} {\n  // Maintain a fifo queue of keys, we cannot rely on Object.keys as the browser may not support it.\n  let evictionOrder: Key[] = [];\n  let cache: Record<string, Value> = {};\n\n  return {\n    add(key: Key, value: Value) {\n      while (evictionOrder.length >= size) {\n        // shift is O(n) but this is small size and only happens if we are\n        // exceeding the cache size so it should be fine.\n        const evictCandidate = evictionOrder.shift();\n\n        if (evictCandidate !== undefined) {\n          // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n          delete cache[evictCandidate];\n        }\n      }\n\n      // in case we have a collision, delete the old key.\n      if (cache[key]) {\n        this.delete(key);\n      }\n\n      evictionOrder.push(key);\n      cache[key] = value;\n    },\n    clear() {\n      cache = {};\n      evictionOrder = [];\n    },\n    get(key: Key): Value | undefined {\n      return cache[key];\n    },\n    size() {\n      return evictionOrder.length;\n    },\n    // Delete cache key and return true if it existed, false otherwise.\n    delete(key: Key): boolean {\n      if (!cache[key]) {\n        return false;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete cache[key];\n\n      for (let i = 0; i < evictionOrder.length; i++) {\n        if (evictionOrder[i] === key) {\n          evictionOrder.splice(i, 1);\n          break;\n        }\n      }\n\n      return true;\n    },\n  };\n}\n", "import type {\n  Event,\n  EventHint,\n  Exception,\n  Hub,\n  Mechanism,\n  Severity,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\n\nimport { isError, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n  return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n  const exception: Exception = {\n    type: error.name || error.constructor.name,\n    value: error.message,\n  };\n\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  return exception;\n}\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nexport function eventFromUnknownInput(\n  getCurrentHub: () => Hub,\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n): Event {\n  let ex: unknown = exception;\n  const providedMechanism: Mechanism | undefined =\n    hint && hint.data && (hint.data as { mechanism: Mechanism }).mechanism;\n  const mechanism: Mechanism = providedMechanism || {\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      const hub = getCurrentHub();\n      const client = hub.getClient();\n      const normalizeDepth = client && client.getOptions().normalizeDepth;\n      hub.configureScope(scope => {\n        scope.setExtra('__serialized__', normalizeToSize(exception, normalizeDepth));\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 as string;\n    }\n    mechanism.synthetic = true;\n  }\n\n  const event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex as Error)],\n    },\n  };\n\n  addExceptionTypeValue(event, undefined, undefined);\n  addExceptionMechanism(event, mechanism);\n\n  return {\n    ...event,\n    event_id: hint && hint.event_id,\n  };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  level: Severity | SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {\n    event_id: hint && hint.event_id,\n    level,\n    message,\n  };\n\n  if (attachStacktrace && hint && hint.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames },\n          },\n        ],\n      };\n    }\n  }\n\n  return event;\n}\n", "// Based on https://github.com/sindresorhus/escape-string-regexp but with modifications to:\n//   a) reduce the size by skipping the runtime type - checking\n//   b) ensure it gets down - compiled for old versions of Node(the published package only supports Node 12+).\n//\n// MIT License\n//\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n// documentation files(the \"Software\"), to deal in the Software without restriction, including without limitation\n// the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and\n// to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n// the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n/**\n * Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to\n * `new RegExp()`.\n *\n * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nexport function escapeStringForRegex(regexString: string): string {\n  // escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems\n  // discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.\n  return regexString.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst aggregateErrors = require('./aggregate-errors.js');\nconst browser = require('./browser.js');\nconst dsn = require('./dsn.js');\nconst error = require('./error.js');\nconst worldwide = require('./worldwide.js');\nconst instrument = require('./instrument.js');\nconst is = require('./is.js');\nconst logger = require('./logger.js');\nconst memo = require('./memo.js');\nconst misc = require('./misc.js');\nconst node = require('./node.js');\nconst normalize = require('./normalize.js');\nconst object = require('./object.js');\nconst path = require('./path.js');\nconst promisebuffer = require('./promisebuffer.js');\nconst requestdata = require('./requestdata.js');\nconst severity = require('./severity.js');\nconst stacktrace = require('./stacktrace.js');\nconst string = require('./string.js');\nconst supports = require('./supports.js');\nconst syncpromise = require('./syncpromise.js');\nconst time = require('./time.js');\nconst tracing = require('./tracing.js');\nconst env = require('./env.js');\nconst envelope = require('./envelope.js');\nconst clientreport = require('./clientreport.js');\nconst ratelimit = require('./ratelimit.js');\nconst baggage = require('./baggage.js');\nconst url = require('./url.js');\nconst userIntegrations = require('./userIntegrations.js');\nconst cache = require('./cache.js');\nconst eventkhulnasoft = require('./eventkhulnasoft.js');\nconst escapeStringForRegex = require('./vendor/escapeStringForRegex.js');\nconst supportsHistory = require('./vendor/supportsHistory.js');\n\n\n\nexports.applyAggregateErrorsToEvent = aggregateErrors.applyAggregateErrorsToEvent;\nexports.getDomElement = browser.getDomElement;\nexports.getLocationHref = browser.getLocationHref;\nexports.htmlTreeAsString = browser.htmlTreeAsString;\nexports.dsnFromString = dsn.dsnFromString;\nexports.dsnToString = dsn.dsnToString;\nexports.makeDsn = dsn.makeDsn;\nexports.SentryError = error.SentryError;\nexports.GLOBAL_OBJ = worldwide.GLOBAL_OBJ;\nexports.getGlobalObject = worldwide.getGlobalObject;\nexports.getGlobalSingleton = worldwide.getGlobalSingleton;\nexports.SENTRY_XHR_DATA_KEY = instrument.SENTRY_XHR_DATA_KEY;\nexports.addInstrumentationHandler = instrument.addInstrumentationHandler;\nexports.instrumentDOM = instrument.instrumentDOM;\nexports.instrumentXHR = instrument.instrumentXHR;\nexports.parseFetchArgs = instrument.parseFetchArgs;\nexports.resetInstrumentationHandlers = instrument.resetInstrumentationHandlers;\nexports.isDOMError = is.isDOMError;\nexports.isDOMException = is.isDOMException;\nexports.isElement = is.isElement;\nexports.isError = is.isError;\nexports.isErrorEvent = is.isErrorEvent;\nexports.isEvent = is.isEvent;\nexports.isInstanceOf = is.isInstanceOf;\nexports.isNaN = is.isNaN;\nexports.isPlainObject = is.isPlainObject;\nexports.isPrimitive = is.isPrimitive;\nexports.isRegExp = is.isRegExp;\nexports.isString = is.isString;\nexports.isSyntheticEvent = is.isSyntheticEvent;\nexports.isThenable = is.isThenable;\nexports.isVueViewModel = is.isVueViewModel;\nexports.CONSOLE_LEVELS = logger.CONSOLE_LEVELS;\nexports.consoleSandbox = logger.consoleSandbox;\nexports.logger = logger.logger;\nexports.originalConsoleMethods = logger.originalConsoleMethods;\nexports.memoKhulnasoft = memo.memoKhulnasoft;\nexports.addContextToFrame = misc.addContextToFrame;\nexports.addExceptionMechanism = misc.addExceptionMechanism;\nexports.addExceptionTypeValue = misc.addExceptionTypeValue;\nexports.arrayify = misc.arrayify;\nexports.checkOrSetAlreadyCaught = misc.checkOrSetAlreadyCaught;\nexports.getEventDescription = misc.getEventDescription;\nexports.parseSemver = misc.parseSemver;\nexports.uuid4 = misc.uuid4;\nexports.dynamicRequire = node.dynamicRequire;\nexports.isNodeEnv = node.isNodeEnv;\nexports.loadModule = node.loadModule;\nexports.normalize = normalize.normalize;\nexports.normalizeToSize = normalize.normalizeToSize;\nexports.walk = normalize.walk;\nexports.addNonEnumerableProperty = object.addNonEnumerableProperty;\nexports.convertToPlainObject = object.convertToPlainObject;\nexports.dropUndefinedKeys = object.dropUndefinedKeys;\nexports.extractExceptionKeysForMessage = object.extractExceptionKeysForMessage;\nexports.fill = object.fill;\nexports.getOriginalFunction = object.getOriginalFunction;\nexports.markFunctionWrapped = object.markFunctionWrapped;\nexports.objectify = object.objectify;\nexports.urlEncode = object.urlEncode;\nexports.basename = path.basename;\nexports.dirname = path.dirname;\nexports.isAbsolute = path.isAbsolute;\nexports.join = path.join;\nexports.normalizePath = path.normalizePath;\nexports.relative = path.relative;\nexports.resolve = path.resolve;\nexports.makePromiseBuffer = promisebuffer.makePromiseBuffer;\nexports.addRequestDataToEvent = requestdata.addRequestDataToEvent;\nexports.addRequestDataToTransaction = requestdata.addRequestDataToTransaction;\nexports.extractPathForTransaction = requestdata.extractPathForTransaction;\nexports.extractRequestData = requestdata.extractRequestData;\nexports.severityFromString = severity.severityFromString;\nexports.severityLevelFromString = severity.severityLevelFromString;\nexports.validSeverityLevels = severity.validSeverityLevels;\nexports.createStackParser = stacktrace.createStackParser;\nexports.getFunctionName = stacktrace.getFunctionName;\nexports.nodeStackLineParser = stacktrace.nodeStackLineParser;\nexports.stackParserFromStackParserOptions = stacktrace.stackParserFromStackParserOptions;\nexports.stripSentryFramesAndReverse = stacktrace.stripSentryFramesAndReverse;\nexports.isMatchingPattern = string.isMatchingPattern;\nexports.safeJoin = string.safeJoin;\nexports.snipLine = string.snipLine;\nexports.stringMatchesSomePattern = string.stringMatchesSomePattern;\nexports.truncate = string.truncate;\nexports.isNativeFetch = supports.isNativeFetch;\nexports.supportsDOMError = supports.supportsDOMError;\nexports.supportsDOMException = supports.supportsDOMException;\nexports.supportsErrorEvent = supports.supportsErrorEvent;\nexports.supportsFetch = supports.supportsFetch;\nexports.supportsNativeFetch = supports.supportsNativeFetch;\nexports.supportsReferrerPolicy = supports.supportsReferrerPolicy;\nexports.supportsReportingObserver = supports.supportsReportingObserver;\nexports.SyncPromise = syncpromise.SyncPromise;\nexports.rejectedSyncPromise = syncpromise.rejectedSyncPromise;\nexports.resolvedSyncPromise = syncpromise.resolvedSyncPromise;\nObject.defineProperty(exports, '_browserPerformanceTimeOriginMode', {\n\tenumerable: true,\n\tget: () => time._browserPerformanceTimeOriginMode\n});\nexports.browserPerformanceTimeOrigin = time.browserPerformanceTimeOrigin;\nexports.dateTimestampInSeconds = time.dateTimestampInSeconds;\nexports.timestampInSeconds = time.timestampInSeconds;\nexports.timestampWithMs = time.timestampWithMs;\nexports.usingPerformanceAPI = time.usingPerformanceAPI;\nexports.TRACEPARENT_REGEXP = tracing.TRACEPARENT_REGEXP;\nexports.extractTraceparentData = tracing.extractTraceparentData;\nexports.generateSentryTraceHeader = tracing.generateSentryTraceHeader;\nexports.tracingContextFromHeaders = tracing.tracingContextFromHeaders;\nexports.getSDKSource = env.getSDKSource;\nexports.isBrowserBundle = env.isBrowserBundle;\nexports.addItemToEnvelope = envelope.addItemToEnvelope;\nexports.createAttachmentEnvelopeItem = envelope.createAttachmentEnvelopeItem;\nexports.createEnvelope = envelope.createEnvelope;\nexports.createEventEnvelopeHeaders = envelope.createEventEnvelopeHeaders;\nexports.envelopeContainsItemType = envelope.envelopeContainsItemType;\nexports.envelopeItemTypeToDataCategory = envelope.envelopeItemTypeToDataCategory;\nexports.forEachEnvelopeItem = envelope.forEachEnvelopeItem;\nexports.getSdkMetadataForEnvelopeHeader = envelope.getSdkMetadataForEnvelopeHeader;\nexports.parseEnvelope = envelope.parseEnvelope;\nexports.serializeEnvelope = envelope.serializeEnvelope;\nexports.createClientReportEnvelope = clientreport.createClientReportEnvelope;\nexports.DEFAULT_RETRY_AFTER = ratelimit.DEFAULT_RETRY_AFTER;\nexports.disabledUntil = ratelimit.disabledUntil;\nexports.isRateLimited = ratelimit.isRateLimited;\nexports.parseRetryAfterHeader = ratelimit.parseRetryAfterHeader;\nexports.updateRateLimits = ratelimit.updateRateLimits;\nexports.BAGGAGE_HEADER_NAME = baggage.BAGGAGE_HEADER_NAME;\nexports.MAX_BAGGAGE_STRING_LENGTH = baggage.MAX_BAGGAGE_STRING_LENGTH;\nexports.SENTRY_BAGGAGE_KEY_PREFIX = baggage.SENTRY_BAGGAGE_KEY_PREFIX;\nexports.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = baggage.SENTRY_BAGGAGE_KEY_PREFIX_REGEX;\nexports.baggageHeaderToDynamicSamplingContext = baggage.baggageHeaderToDynamicSamplingContext;\nexports.dynamicSamplingContextToSentryBaggageHeader = baggage.dynamicSamplingContextToSentryBaggageHeader;\nexports.getNumberOfUrlSegments = url.getNumberOfUrlSegments;\nexports.getSanitizedUrlString = url.getSanitizedUrlString;\nexports.parseUrl = url.parseUrl;\nexports.stripUrlQueryAndFragment = url.stripUrlQueryAndFragment;\nexports.addOrUpdateIntegration = userIntegrations.addOrUpdateIntegration;\nexports.makeFifoCache = cache.makeFifoCache;\nexports.eventFromMessage = eventkhulnasoft.eventFromMessage;\nexports.eventFromUnknownInput = eventkhulnasoft.eventFromUnknownInput;\nexports.exceptionFromError = eventkhulnasoft.exceptionFromError;\nexports.parseStackFrames = eventkhulnasoft.parseStackFrames;\nexports.escapeStringForRegex = escapeStringForRegex.escapeStringForRegex;\nexports.supportsHistory = supportsHistory.supportsHistory;\n//# sourceMappingURL=index.js.map\n", "export const DEFAULT_ENVIRONMENT = 'production';\n", "import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session: Session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n", "/* eslint-disable max-lines */\nimport type {\n  Attachment,\n  Breadcrumb,\n  CaptureContext,\n  Context,\n  Contexts,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  Primitive,\n  PropagationContext,\n  RequestSession,\n  Scope as ScopeInterface,\n  ScopeContext,\n  Session,\n  Severity,\n  SeverityLevel,\n  Span,\n  Transaction,\n  User,\n} from '@sentry/types';\nimport {\n  arrayify,\n  dateTimestampInSeconds,\n  getGlobalSingleton,\n  isPlainObject,\n  isThenable,\n  logger,\n  SyncPromise,\n  uuid4,\n} from '@sentry/utils';\n\nimport { updateSession } from './session';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\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 notifying is happening. */\n  protected _notifyingListeners: boolean;\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  /** Attachments */\n  protected _attachments: Attachment[];\n\n  /** Propagation Context for distributed tracing */\n  protected _propagationContext: PropagationContext;\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n  protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  // eslint-disable-next-line deprecation/deprecation\n  protected _level?: Severity | SeverityLevel;\n\n  /** Transaction Name */\n  protected _transactionName?: string;\n\n  /** Span */\n  protected _span?: Span;\n\n  /** Session */\n  protected _session?: Session;\n\n  /** Request Mode Session Status */\n  protected _requestSession?: RequestSession;\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n  public constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = generatePropagationContext();\n  }\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      newScope._requestSession = scope._requestSession;\n      newScope._attachments = [...scope._attachments];\n      newScope._sdkProcessingMetadata = { ...scope._sdkProcessingMetadata };\n      newScope._propagationContext = { ...scope._propagationContext };\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      updateSession(this._session, { 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 getRequestSession(): RequestSession | undefined {\n    return this._requestSession;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setRequestSession(requestSession?: RequestSession): this {\n    this._requestSession = requestSession;\n    return this;\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(\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel,\n  ): 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   * @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[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 (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n    // have a pointer to the currently-active transaction.\n    const span = this.getSpan();\n    return span && span.transaction;\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      if (captureContext._requestSession) {\n        this._requestSession = captureContext._requestSession;\n      }\n      if (captureContext._propagationContext) {\n        this._propagationContext = captureContext._propagationContext;\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      if (captureContext.requestSession) {\n        this._requestSession = captureContext.requestSession;\n      }\n      if (captureContext.propagationContext) {\n        this._propagationContext = captureContext.propagationContext;\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._requestSession = undefined;\n    this._span = undefined;\n    this._session = undefined;\n    this._notifyScopeListeners();\n    this._attachments = [];\n    this._propagationContext = generatePropagationContext();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    const breadcrumbs = this._breadcrumbs;\n    breadcrumbs.push(mergedBreadcrumb);\n    this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getLastBreadcrumb(): Breadcrumb | undefined {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addAttachment(attachment: Attachment): this {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getAttachments(): Attachment[] {\n    return this._attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearAttachments(): this {\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * Applies data from the scope to the event and runs all event processors on it.\n   *\n   * @param event Event\n   * @param hint Object containing additional information about the original exception, for use by the event processors.\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\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 relies on that.\n    if (this._span) {\n      event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n      const transaction = this._span.transaction;\n      if (transaction) {\n        event.sdkProcessingMetadata = {\n          dynamicSamplingContext: transaction.getDynamicSamplingContext(),\n          ...event.sdkProcessingMetadata,\n        };\n        const transactionName = transaction.name;\n        if (transactionName) {\n          event.tags = { transaction: transactionName, ...event.tags };\n        }\n      }\n    }\n\n    this._applyFingerprint(event);\n\n    const scopeBreadcrumbs = this._getBreadcrumbs();\n    const breadcrumbs = [...(event.breadcrumbs || []), ...scopeBreadcrumbs];\n    event.breadcrumbs = breadcrumbs.length > 0 ? breadcrumbs : undefined;\n\n    event.sdkProcessingMetadata = {\n      ...event.sdkProcessingMetadata,\n      ...this._sdkProcessingMetadata,\n      propagationContext: this._propagationContext,\n    };\n\n    return this._notifyEventProcessors([...getGlobalEventProcessors(), ...this._eventProcessors], event, hint);\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry\n   */\n  public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setPropagationContext(context: PropagationContext): this {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getPropagationContext(): PropagationContext {\n    return this._propagationContext;\n  }\n\n  /**\n   * Get the breadcrumbs for this scope.\n   */\n  protected _getBreadcrumbs(): Breadcrumb[] {\n    return this._breadcrumbs;\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\n        __DEBUG_BUILD__ &&\n          processor.id &&\n          result === null &&\n          logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n        if (isThenable(result)) {\n          void result\n            .then(final => this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n            .then(null, reject);\n        } else {\n          void 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 ? arrayify(event.fingerprint) : [];\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 * Returns the global event processors.\n */\nfunction getGlobalEventProcessors(): EventProcessor[] {\n  return getGlobalSingleton<EventProcessor[]>('globalEventProcessors', () => []);\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\nfunction generatePropagationContext(): PropagationContext {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n", "/* eslint-disable max-lines */\nimport type {\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  Session,\n  SessionContext,\n  Severity,\n  SeverityLevel,\n  Transaction,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { consoleSandbox, dateTimestampInSeconds, getGlobalSingleton, GLOBAL_OBJ, logger, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } 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 = 4;\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\nexport interface RunWithAsyncContextOptions {\n  /** Whether to reuse an existing async context if one exists. Defaults to false. */\n  reuseExisting?: boolean;\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Strategy used to track async context.\n */\nexport interface AsyncContextStrategy {\n  /**\n   * Gets the current async context. Returns undefined if there is no current async context.\n   */\n  getCurrentHub: () => Hub | undefined;\n  /**\n   * Runs the supplied callback in its own async context.\n   */\n  runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T;\n}\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n  client?: Client;\n  scope: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n  __SENTRY__?: {\n    hub?: Hub;\n    acs?: AsyncContextStrategy;\n    /**\n     * Extra Hub properties injected by various SDKs\n     */\n    integrations?: Integration[];\n    extensions?: {\n      /** Extension methods for the hub, which are bound to the current Hub instance */\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      [key: string]: Function;\n    };\n  };\n}\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._stack = [{ scope }];\n    if (client) {\n      this.bindClient(client);\n    }\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 {\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  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error('Sentry syntheticException');\n    this._withClient((client, scope) => {\n      client.captureException(\n        exception,\n        {\n          originalException: exception,\n          syntheticException,\n          ...hint,\n          event_id: eventId,\n        },\n        scope,\n      );\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n  ): string {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error(message);\n    this._withClient((client, scope) => {\n      client.captureMessage(\n        message,\n        level,\n        {\n          originalException: message,\n          syntheticException,\n          ...hint,\n          event_id: eventId,\n        },\n        scope,\n      );\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n    if (!event.type) {\n      this._lastEventId = eventId;\n    }\n\n    this._withClient((client, scope) => {\n      client.captureEvent(event, { ...hint, event_id: eventId }, scope);\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 (!client) return;\n\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    if (client.emit) {\n      client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n    }\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): void {\n    this.getScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: Primitive }): void {\n    this.getScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: Extras): void {\n    this.getScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): void {\n    this.getScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: Extra): void {\n    this.getScope().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    this.getScope().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 (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      __DEBUG_BUILD__ && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n    const result = this._callExtensionMethod<Transaction>('startTransaction', context, customSamplingContext);\n\n    if (__DEBUG_BUILD__ && !result) {\n      const client = this.getClient();\n      if (!client) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n        );\n      } else {\n        // eslint-disable-next-line no-console\n        console.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n      }\n    }\n\n    return result;\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 captureSession(endSession: boolean = false): void {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public endSession(): void {\n    const layer = this.getStackTop();\n    const scope = layer.scope;\n    const session = scope.getSession();\n    if (session) {\n      closeSession(session);\n    }\n    this._sendSessionUpdate();\n\n    // the session is over; take it off of the scope\n    scope.setSession();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startSession(context?: SessionContext): Session {\n    const { scope, client } = this.getStackTop();\n    const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n    // Will fetch userAgent if called from browser sdk\n    const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n    const session = makeSession({\n      release,\n      environment,\n      user: scope.getUser(),\n      ...(userAgent && { userAgent }),\n      ...context,\n    });\n\n    // End existing session if there's one\n    const currentSession = scope.getSession && scope.getSession();\n    if (currentSession && currentSession.status === 'ok') {\n      updateSession(currentSession, { status: 'exited' });\n    }\n    this.endSession();\n\n    // Afterwards we set the new session on the scope\n    scope.setSession(session);\n\n    return session;\n  }\n\n  /**\n   * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n   * when Tracing is used.\n   */\n  public shouldSendDefaultPii(): boolean {\n    const client = this.getClient();\n    const options = client && client.getOptions();\n    return Boolean(options && options.sendDefaultPii);\n  }\n\n  /**\n   * Sends the current Session on the scope\n   */\n  private _sendSessionUpdate(): void {\n    const { scope, client } = this.getStackTop();\n\n    const session = scope.getSession();\n    if (session && client && client.captureSession) {\n      client.captureSession(session);\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  private _withClient(callback: (client: Client, scope: Scope) => void): void {\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(client, scope);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-expect-error 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    __DEBUG_BUILD__ && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n  GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return GLOBAL_OBJ;\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 (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n    if (hub) {\n      return hub;\n    }\n  }\n\n  // Return hub that lives on a global object\n  return getGlobalHub(registry);\n}\n\nfunction getGlobalHub(registry: Carrier = getMainCarrier()): Hub {\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  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\nexport function ensureHubOnCarrier(carrier: Carrier, parent: Hub = getGlobalHub()): void {\n  // If there's no hub on current domain, or it's an old API, assign a new one\n  if (!hasHubOnCarrier(carrier) || getHubFromCarrier(carrier).isOlderThan(API_VERSION)) {\n    const globalHubTopStack = parent.getStackTop();\n    setHubOnCarrier(carrier, new Hub(globalHubTopStack.client, Scope.clone(globalHubTopStack.scope)));\n  }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  registry.__SENTRY__ = registry.__SENTRY__ || {};\n  registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nexport function runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions = {}): T {\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n  }\n\n  // if there was no strategy, fallback to just calling the callback\n  return callback();\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  return getGlobalSingleton<Hub>('hub', () => new Hub(), carrier);\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 * @returns A boolean indicating success or failure\n */\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n  if (!carrier) return false;\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n  __SENTRY__.hub = hub;\n  return true;\n}\n", "import type { Options } from '@sentry/types';\n\nimport { getCurrentHub } from '../hub';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(\n  maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,\n): boolean {\n  if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n    return false;\n  }\n\n  const client = getCurrentHub().getClient();\n  const options = maybeOptions || (client && client.getOptions());\n  return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n", "import type { Transaction } from '@sentry/types';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\n\n/**\n * The `extractTraceparentData` function and `TRACEPARENT_REGEXP` constant used\n * to be declared in this file. It was later moved into `@sentry/utils` as part of a\n * move to remove `@sentry/tracing` dependencies from `@sentry/node` (`extractTraceparentData`\n * is the only tracing function used by `@sentry/node`).\n *\n * These exports are kept here for backwards compatability's sake.\n *\n * TODO(v7): Reorganize these exports\n *\n * See https://github.com/getsentry/sentry-javascript/issues/4642 for more details.\n */\nexport { TRACEPARENT_REGEXP, extractTraceparentData } from '@sentry/utils';\n\n/** Grabs active transaction off scope, if any */\nexport function getActiveTransaction<T extends Transaction>(maybeHub?: Hub): T | undefined {\n  const hub = maybeHub || getCurrentHub();\n  const scope = hub.getScope();\n  return scope.getTransaction() as T | undefined;\n}\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n", "import { addInstrumentationHandler, logger } from '@sentry/utils';\n\nimport type { SpanStatusType } from './span';\nimport { getActiveTransaction } from './utils';\n\nlet errorsInstrumented = false;\n\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation(): void {\n  if (errorsInstrumented) {\n    return;\n  }\n\n  errorsInstrumented = true;\n  addInstrumentationHandler('error', errorCallback);\n  addInstrumentationHandler('unhandledrejection', errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback(): void {\n  const activeTransaction = getActiveTransaction();\n  if (activeTransaction) {\n    const status: SpanStatusType = 'internal_error';\n    __DEBUG_BUILD__ && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n    activeTransaction.setStatus(status);\n  }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n", "/* eslint-disable max-lines */\nimport type {\n  Instrumenter,\n  Primitive,\n  Span as SpanInterface,\n  SpanContext,\n  SpanOrigin,\n  TraceContext,\n  Transaction,\n} from '@sentry/types';\nimport { dropUndefinedKeys, generateSentryTraceHeader, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nexport class SpanRecorder {\n  public spans: Span[];\n\n  private readonly _maxlen: number;\n\n  public constructor(maxlen: number = 1000) {\n    this._maxlen = maxlen;\n    this.spans = [];\n  }\n\n  /**\n   * This is just so that we don't run out of memory while recording a lot\n   * of spans. At some point we just stop and flush out the start of the\n   * trace tree (i.e.the first n spans with the smallest\n   * start_timestamp).\n   */\n  public add(span: Span): void {\n    if (this.spans.length > this._maxlen) {\n      span.spanRecorder = undefined;\n    } else {\n      this.spans.push(span);\n    }\n  }\n}\n\n/**\n * Span contains all data about a span\n */\nexport class Span implements SpanInterface {\n  /**\n   * @inheritDoc\n   */\n  public traceId: string;\n\n  /**\n   * @inheritDoc\n   */\n  public spanId: string;\n\n  /**\n   * @inheritDoc\n   */\n  public parentSpanId?: string;\n\n  /**\n   * Internal keeper of the status\n   */\n  public status?: SpanStatusType | string;\n\n  /**\n   * @inheritDoc\n   */\n  public sampled?: boolean;\n\n  /**\n   * Timestamp in seconds when the span was created.\n   */\n  public startTimestamp: number;\n\n  /**\n   * Timestamp in seconds when the span ended.\n   */\n  public endTimestamp?: number;\n\n  /**\n   * @inheritDoc\n   */\n  public op?: string;\n\n  /**\n   * @inheritDoc\n   */\n  public description?: string;\n\n  /**\n   * @inheritDoc\n   */\n  public tags: { [key: string]: Primitive };\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public data: { [key: string]: any };\n\n  /**\n   * List of spans that were finalized\n   */\n  public spanRecorder?: SpanRecorder;\n\n  /**\n   * @inheritDoc\n   */\n  public transaction?: Transaction;\n\n  /**\n   * The instrumenter that created this span.\n   */\n  public instrumenter: Instrumenter;\n\n  /**\n   * The origin of the span, giving context about what created the span.\n   */\n  public origin?: SpanOrigin;\n\n  /**\n   * You should never call the constructor manually, always use `Sentry.startTransaction()`\n   * or call `startChild()` on an existing span.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  public constructor(spanContext: SpanContext = {}) {\n    this.traceId = spanContext.traceId || uuid4();\n    this.spanId = spanContext.spanId || uuid4().substring(16);\n    this.startTimestamp = spanContext.startTimestamp || timestampInSeconds();\n    this.tags = spanContext.tags || {};\n    this.data = spanContext.data || {};\n    this.instrumenter = spanContext.instrumenter || 'sentry';\n    this.origin = spanContext.origin || 'manual';\n\n    if (spanContext.parentSpanId) {\n      this.parentSpanId = spanContext.parentSpanId;\n    }\n    // We want to include booleans as well here\n    if ('sampled' in spanContext) {\n      this.sampled = spanContext.sampled;\n    }\n    if (spanContext.op) {\n      this.op = spanContext.op;\n    }\n    if (spanContext.description) {\n      this.description = spanContext.description;\n    }\n    if (spanContext.name) {\n      this.description = spanContext.name;\n    }\n    if (spanContext.status) {\n      this.status = spanContext.status;\n    }\n    if (spanContext.endTimestamp) {\n      this.endTimestamp = spanContext.endTimestamp;\n    }\n  }\n\n  /** An alias for `description` of the Span. */\n  public get name(): string {\n    return this.description || '';\n  }\n  /** Update the name of the span. */\n  public set name(name: string) {\n    this.setName(name);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startChild(\n    spanContext?: Pick<SpanContext, Exclude<keyof SpanContext, 'sampled' | 'traceId' | 'parentSpanId'>>,\n  ): Span {\n    const childSpan = new Span({\n      ...spanContext,\n      parentSpanId: this.spanId,\n      sampled: this.sampled,\n      traceId: this.traceId,\n    });\n\n    childSpan.spanRecorder = this.spanRecorder;\n    if (childSpan.spanRecorder) {\n      childSpan.spanRecorder.add(childSpan);\n    }\n\n    childSpan.transaction = this.transaction;\n\n    if (__DEBUG_BUILD__ && childSpan.transaction) {\n      const opStr = (spanContext && spanContext.op) || '< unknown op >';\n      const nameStr = childSpan.transaction.name || '< unknown name >';\n      const idStr = childSpan.transaction.spanId;\n\n      const logMessage = `[Tracing] Starting '${opStr}' span on transaction '${nameStr}' (${idStr}).`;\n      childSpan.transaction.metadata.spanMetadata[childSpan.spanId] = { logMessage };\n      logger.log(logMessage);\n    }\n\n    return childSpan;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: Primitive): this {\n    this.tags = { ...this.tags, [key]: value };\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n  public setData(key: string, value: any): this {\n    this.data = { ...this.data, [key]: value };\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setStatus(value: SpanStatusType): this {\n    this.status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setHttpStatus(httpStatus: number): this {\n    this.setTag('http.status_code', String(httpStatus));\n    this.setData('http.response.status_code', httpStatus);\n    const spanStatus = spanStatusfromHttpCode(httpStatus);\n    if (spanStatus !== 'unknown_error') {\n      this.setStatus(spanStatus);\n    }\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setName(name: string): void {\n    this.description = name;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public isSuccess(): boolean {\n    return this.status === 'ok';\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public finish(endTimestamp?: number): void {\n    if (\n      __DEBUG_BUILD__ &&\n      // Don't call this for transactions\n      this.transaction &&\n      this.transaction.spanId !== this.spanId\n    ) {\n      const { logMessage } = this.transaction.metadata.spanMetadata[this.spanId];\n      if (logMessage) {\n        logger.log((logMessage as string).replace('Starting', 'Finishing'));\n      }\n    }\n\n    this.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampInSeconds();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toTraceparent(): string {\n    return generateSentryTraceHeader(this.traceId, this.spanId, this.sampled);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toContext(): SpanContext {\n    return dropUndefinedKeys({\n      data: this.data,\n      description: this.description,\n      endTimestamp: this.endTimestamp,\n      op: this.op,\n      parentSpanId: this.parentSpanId,\n      sampled: this.sampled,\n      spanId: this.spanId,\n      startTimestamp: this.startTimestamp,\n      status: this.status,\n      tags: this.tags,\n      traceId: this.traceId,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateWithContext(spanContext: SpanContext): this {\n    this.data = spanContext.data || {};\n    this.description = spanContext.description;\n    this.endTimestamp = spanContext.endTimestamp;\n    this.op = spanContext.op;\n    this.parentSpanId = spanContext.parentSpanId;\n    this.sampled = spanContext.sampled;\n    this.spanId = spanContext.spanId || this.spanId;\n    this.startTimestamp = spanContext.startTimestamp || this.startTimestamp;\n    this.status = spanContext.status;\n    this.tags = spanContext.tags || {};\n    this.traceId = spanContext.traceId || this.traceId;\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTraceContext(): TraceContext {\n    return dropUndefinedKeys({\n      data: Object.keys(this.data).length > 0 ? this.data : undefined,\n      description: this.description,\n      op: this.op,\n      parent_span_id: this.parentSpanId,\n      span_id: this.spanId,\n      status: this.status,\n      tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n      trace_id: this.traceId,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toJSON(): {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    data?: { [key: string]: any };\n    description?: string;\n    op?: string;\n    parent_span_id?: string;\n    span_id: string;\n    start_timestamp: number;\n    status?: string;\n    tags?: { [key: string]: Primitive };\n    timestamp?: number;\n    trace_id: string;\n    origin?: SpanOrigin;\n  } {\n    return dropUndefinedKeys({\n      data: Object.keys(this.data).length > 0 ? this.data : undefined,\n      description: this.description,\n      op: this.op,\n      parent_span_id: this.parentSpanId,\n      span_id: this.spanId,\n      start_timestamp: this.startTimestamp,\n      status: this.status,\n      tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n      timestamp: this.endTimestamp,\n      trace_id: this.traceId,\n      origin: this.origin,\n    });\n  }\n}\n\nexport type SpanStatusType =\n  /** The operation completed successfully. */\n  | 'ok'\n  /** Deadline expired before operation could complete. */\n  | 'deadline_exceeded'\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  | 'unauthenticated'\n  /** 403 Forbidden */\n  | 'permission_denied'\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  | 'not_found'\n  /** 429 Too Many Requests */\n  | 'resource_exhausted'\n  /** Client specified an invalid argument. 4xx. */\n  | 'invalid_argument'\n  /** 501 Not Implemented */\n  | 'unimplemented'\n  /** 503 Service Unavailable */\n  | 'unavailable'\n  /** Other/generic 5xx. */\n  | 'internal_error'\n  /** Unknown. Any non-standard HTTP status code. */\n  | 'unknown_error'\n  /** The operation was cancelled (typically by the user). */\n  | 'cancelled'\n  /** Already exists (409) */\n  | 'already_exists'\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  | 'failed_precondition'\n  /** The operation was aborted, typically due to a concurrency issue. */\n  | 'aborted'\n  /** Operation was attempted past the valid range. */\n  | 'out_of_range'\n  /** Unrecoverable data loss or corruption */\n  | 'data_loss';\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function spanStatusfromHttpCode(httpStatus: number): SpanStatusType {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return 'ok';\n  }\n\n  if (httpStatus >= 400 && httpStatus < 500) {\n    switch (httpStatus) {\n      case 401:\n        return 'unauthenticated';\n      case 403:\n        return 'permission_denied';\n      case 404:\n        return 'not_found';\n      case 409:\n        return 'already_exists';\n      case 413:\n        return 'failed_precondition';\n      case 429:\n        return 'resource_exhausted';\n      default:\n        return 'invalid_argument';\n    }\n  }\n\n  if (httpStatus >= 500 && httpStatus < 600) {\n    switch (httpStatus) {\n      case 501:\n        return 'unimplemented';\n      case 503:\n        return 'unavailable';\n      case 504:\n        return 'deadline_exceeded';\n      default:\n        return 'internal_error';\n    }\n  }\n\n  return 'unknown_error';\n}\n", "import type { Client, DynamicSamplingContext, Scope } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatchs the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(\n  trace_id: string,\n  client: Client,\n  scope?: Scope,\n): DynamicSamplingContext {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n  const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    user_segment,\n    public_key,\n    trace_id,\n  }) as DynamicSamplingContext;\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n", "import type {\n  Context,\n  Contexts,\n  DynamicSamplingContext,\n  Event,\n  Measurements,\n  MeasurementUnit,\n  Transaction as TransactionInterface,\n  TransactionContext,\n  TransactionMetadata,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';\nimport { Span as SpanClass, SpanRecorder } from './span';\n\n/** JSDoc */\nexport class Transaction extends SpanClass implements TransactionInterface {\n  public metadata: TransactionMetadata;\n\n  /**\n   * The reference to the current hub.\n   */\n  public _hub: Hub;\n\n  private _name: string;\n\n  private _measurements: Measurements;\n\n  private _contexts: Contexts;\n\n  private _trimEnd?: boolean;\n\n  private _frozenDynamicSamplingContext: Readonly<Partial<DynamicSamplingContext>> | undefined;\n\n  /**\n   * This constructor should never be called manually. Those instrumenting tracing should use\n   * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  public constructor(transactionContext: TransactionContext, hub?: Hub) {\n    super(transactionContext);\n    // We need to delete description since it's set by the Span class constructor\n    // but not needed for transactions.\n    delete this.description;\n\n    this._measurements = {};\n    this._contexts = {};\n\n    this._hub = hub || getCurrentHub();\n\n    this._name = transactionContext.name || '';\n\n    this.metadata = {\n      source: 'custom',\n      ...transactionContext.metadata,\n      spanMetadata: {},\n    };\n\n    this._trimEnd = transactionContext.trimEnd;\n\n    // this is because transactions are also spans, and spans have a transaction pointer\n    this.transaction = this;\n\n    // If Dynamic Sampling Context is provided during the creation of the transaction, we freeze it as it usually means\n    // there is incoming Dynamic Sampling Context. (Either through an incoming request, a baggage meta-tag, or other means)\n    const incomingDynamicSamplingContext = this.metadata.dynamicSamplingContext;\n    if (incomingDynamicSamplingContext) {\n      // We shallow copy this in case anything writes to the original reference of the passed in `dynamicSamplingContext`\n      this._frozenDynamicSamplingContext = { ...incomingDynamicSamplingContext };\n    }\n  }\n\n  /** Getter for `name` property */\n  public get name(): string {\n    return this._name;\n  }\n\n  /** Setter for `name` property, which also sets `source` as custom */\n  public set name(newName: string) {\n    this.setName(newName);\n  }\n\n  /**\n   * JSDoc\n   */\n  public setName(name: string, source: TransactionMetadata['source'] = 'custom'): void {\n    this._name = name;\n    this.metadata.source = source;\n  }\n\n  /**\n   * Attaches SpanRecorder to the span itself\n   * @param maxlen maximum number of spans that can be recorded\n   */\n  public initSpanRecorder(maxlen: number = 1000): void {\n    if (!this.spanRecorder) {\n      this.spanRecorder = new SpanRecorder(maxlen);\n    }\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(key: string, context: Context | null): void {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setMeasurement(name: string, value: number, unit: MeasurementUnit = ''): void {\n    this._measurements[name] = { value, unit };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setMetadata(newMetadata: Partial<TransactionMetadata>): void {\n    this.metadata = { ...this.metadata, ...newMetadata };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public finish(endTimestamp?: number): string | undefined {\n    // This transaction is already finished, so we should not flush it again.\n    if (this.endTimestamp !== undefined) {\n      return undefined;\n    }\n\n    if (!this.name) {\n      __DEBUG_BUILD__ && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this.name = '<unlabeled transaction>';\n    }\n\n    // just sets the end timestamp\n    super.finish(endTimestamp);\n\n    const client = this._hub.getClient();\n    if (client && client.emit) {\n      client.emit('finishTransaction', this);\n    }\n\n    if (this.sampled !== true) {\n      // At this point if `sampled !== true` we want to discard the transaction.\n      __DEBUG_BUILD__ && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n      if (client) {\n        client.recordDroppedEvent('sample_rate', 'transaction');\n      }\n\n      return undefined;\n    }\n\n    const finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(s => s !== this && s.endTimestamp) : [];\n\n    if (this._trimEnd && finishedSpans.length > 0) {\n      this.endTimestamp = finishedSpans.reduce((prev: SpanClass, current: SpanClass) => {\n        if (prev.endTimestamp && current.endTimestamp) {\n          return prev.endTimestamp > current.endTimestamp ? prev : current;\n        }\n        return prev;\n      }).endTimestamp;\n    }\n\n    const metadata = this.metadata;\n\n    const transaction: Event = {\n      contexts: {\n        ...this._contexts,\n        // We don't want to override trace context\n        trace: this.getTraceContext(),\n      },\n      spans: finishedSpans,\n      start_timestamp: this.startTimestamp,\n      tags: this.tags,\n      timestamp: this.endTimestamp,\n      transaction: this.name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        ...metadata,\n        dynamicSamplingContext: this.getDynamicSamplingContext(),\n      },\n      ...(metadata.source && {\n        transaction_info: {\n          source: metadata.source,\n        },\n      }),\n    };\n\n    const hasMeasurements = Object.keys(this._measurements).length > 0;\n\n    if (hasMeasurements) {\n      __DEBUG_BUILD__ &&\n        logger.log(\n          '[Measurements] Adding measurements to transaction',\n          JSON.stringify(this._measurements, undefined, 2),\n        );\n      transaction.measurements = this._measurements;\n    }\n\n    __DEBUG_BUILD__ && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this.name}.`);\n\n    return this._hub.captureEvent(transaction);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toContext(): TransactionContext {\n    const spanContext = super.toContext();\n\n    return dropUndefinedKeys({\n      ...spanContext,\n      name: this.name,\n      trimEnd: this._trimEnd,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateWithContext(transactionContext: TransactionContext): this {\n    super.updateWithContext(transactionContext);\n\n    this.name = transactionContext.name || '';\n\n    this._trimEnd = transactionContext.trimEnd;\n\n    return this;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * @experimental\n   */\n  public getDynamicSamplingContext(): Readonly<Partial<DynamicSamplingContext>> {\n    if (this._frozenDynamicSamplingContext) {\n      return this._frozenDynamicSamplingContext;\n    }\n\n    const hub = this._hub || getCurrentHub();\n    const client = hub.getClient();\n\n    if (!client) return {};\n\n    const scope = hub.getScope();\n    const dsc = getDynamicSamplingContextFromClient(this.traceId, client, scope);\n\n    const maybeSampleRate = this.metadata.sampleRate;\n    if (maybeSampleRate !== undefined) {\n      dsc.sample_rate = `${maybeSampleRate}`;\n    }\n\n    // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n    const source = this.metadata.source;\n    if (source && source !== 'url') {\n      dsc.transaction = this.name;\n    }\n\n    if (this.sampled !== undefined) {\n      dsc.sampled = String(this.sampled);\n    }\n\n    // Uncomment if we want to make DSC immutable\n    // this._frozenDynamicSamplingContext = dsc;\n\n    return dsc;\n  }\n\n  /**\n   * Override the current hub with a new one.\n   * Used if you want another hub to finish the transaction.\n   *\n   * @internal\n   */\n  public setHub(hub: Hub): void {\n    this._hub = hub;\n  }\n}\n", "/* eslint-disable max-lines */\nimport type { TransactionContext } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport type { Span } from './span';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\n\nexport const TRACING_DEFAULTS = {\n  idleTimeout: 1000,\n  finalTimeout: 30000,\n  heartbeatInterval: 5000,\n};\n\nconst FINISH_REASON_TAG = 'finishReason';\n\nconst IDLE_TRANSACTION_FINISH_REASONS = [\n  'heartbeatFailed',\n  'idleTimeout',\n  'documentHidden',\n  'finalTimeout',\n  'externalFinish',\n  'cancelled',\n];\n\n/**\n * @inheritDoc\n */\nexport class IdleTransactionSpanRecorder extends SpanRecorder {\n  public constructor(\n    private readonly _pushActivity: (id: string) => void,\n    private readonly _popActivity: (id: string) => void,\n    public transactionSpanId: string,\n    maxlen?: number,\n  ) {\n    super(maxlen);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public add(span: Span): void {\n    // We should make sure we do not push and pop activities for\n    // the transaction that this span recorder belongs to.\n    if (span.spanId !== this.transactionSpanId) {\n      // We patch span.finish() to pop an activity after setting an endTimestamp.\n      span.finish = (endTimestamp?: number) => {\n        span.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampInSeconds();\n        this._popActivity(span.spanId);\n      };\n\n      // We should only push new activities if the span does not have an end timestamp.\n      if (span.endTimestamp === undefined) {\n        this._pushActivity(span.spanId);\n      }\n    }\n\n    super.add(span);\n  }\n}\n\nexport type BeforeFinishCallback = (transactionSpan: IdleTransaction, endTimestamp: number) => void;\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nexport class IdleTransaction extends Transaction {\n  // Activities store a list of active spans\n  public activities: Record<string, boolean>;\n  // Track state of activities in previous heartbeat\n  private _prevHeartbeatString: string | undefined;\n\n  // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n  private _heartbeatCounter: number;\n\n  // We should not use heartbeat if we finished a transaction\n  private _finished: boolean;\n\n  // Idle timeout was canceled and we should finish the transaction with the last span end.\n  private _idleTimeoutCanceledPermanently: boolean;\n\n  private readonly _beforeFinishCallbacks: BeforeFinishCallback[];\n\n  /**\n   * Timer that tracks Transaction idleTimeout\n   */\n  private _idleTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n  private _finishReason: (typeof IDLE_TRANSACTION_FINISH_REASONS)[number];\n\n  public constructor(\n    transactionContext: TransactionContext,\n    private readonly _idleHub: Hub,\n    /**\n     * The time to wait in ms until the idle transaction will be finished. This timer is started each time\n     * there are no active spans on this transaction.\n     */\n    private readonly _idleTimeout: number = TRACING_DEFAULTS.idleTimeout,\n    /**\n     * The final value in ms that a transaction cannot exceed\n     */\n    private readonly _finalTimeout: number = TRACING_DEFAULTS.finalTimeout,\n    private readonly _heartbeatInterval: number = TRACING_DEFAULTS.heartbeatInterval,\n    // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n    private readonly _onScope: boolean = false,\n  ) {\n    super(transactionContext, _idleHub);\n\n    this.activities = {};\n    this._heartbeatCounter = 0;\n    this._finished = false;\n    this._idleTimeoutCanceledPermanently = false;\n    this._beforeFinishCallbacks = [];\n    this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[4];\n\n    if (_onScope) {\n      // We set the transaction here on the scope so error events pick up the trace\n      // context and attach it to the error.\n      __DEBUG_BUILD__ && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanId}`);\n      _idleHub.configureScope(scope => scope.setSpan(this));\n    }\n\n    this._restartIdleTimeout();\n    setTimeout(() => {\n      if (!this._finished) {\n        this.setStatus('deadline_exceeded');\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[3];\n        this.finish();\n      }\n    }, this._finalTimeout);\n  }\n\n  /** {@inheritDoc} */\n  public finish(endTimestamp: number = timestampInSeconds()): string | undefined {\n    this._finished = true;\n    this.activities = {};\n\n    if (this.op === 'ui.action.click') {\n      this.setTag(FINISH_REASON_TAG, this._finishReason);\n    }\n\n    if (this.spanRecorder) {\n      __DEBUG_BUILD__ &&\n        logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestamp * 1000).toISOString(), this.op);\n\n      for (const callback of this._beforeFinishCallbacks) {\n        callback(this, endTimestamp);\n      }\n\n      this.spanRecorder.spans = this.spanRecorder.spans.filter((span: Span) => {\n        // If we are dealing with the transaction itself, we just return it\n        if (span.spanId === this.spanId) {\n          return true;\n        }\n\n        // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n        if (!span.endTimestamp) {\n          span.endTimestamp = endTimestamp;\n          span.setStatus('cancelled');\n          __DEBUG_BUILD__ &&\n            logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n        }\n\n        const spanStartedBeforeTransactionFinish = span.startTimestamp < endTimestamp;\n\n        // Add a delta with idle timeout so that we prevent false positives\n        const timeoutWithMarginOfError = (this._finalTimeout + this._idleTimeout) / 1000;\n        const spanEndedBeforeFinalTimeout = span.endTimestamp - this.startTimestamp < timeoutWithMarginOfError;\n\n        if (__DEBUG_BUILD__) {\n          const stringifiedSpan = JSON.stringify(span, undefined, 2);\n          if (!spanStartedBeforeTransactionFinish) {\n            logger.log('[Tracing] discarding Span since it happened after Transaction was finished', stringifiedSpan);\n          } else if (!spanEndedBeforeFinalTimeout) {\n            logger.log('[Tracing] discarding Span since it finished after Transaction final timeout', stringifiedSpan);\n          }\n        }\n\n        return spanStartedBeforeTransactionFinish && spanEndedBeforeFinalTimeout;\n      });\n\n      __DEBUG_BUILD__ && logger.log('[Tracing] flushing IdleTransaction');\n    } else {\n      __DEBUG_BUILD__ && logger.log('[Tracing] No active IdleTransaction');\n    }\n\n    // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n    if (this._onScope) {\n      const scope = this._idleHub.getScope();\n      if (scope.getTransaction() === this) {\n        scope.setSpan(undefined);\n      }\n    }\n\n    return super.finish(endTimestamp);\n  }\n\n  /**\n   * Register a callback function that gets excecuted before the transaction finishes.\n   * Useful for cleanup or if you want to add any additional spans based on current context.\n   *\n   * This is exposed because users have no other way of running something before an idle transaction\n   * finishes.\n   */\n  public registerBeforeFinishCallback(callback: BeforeFinishCallback): void {\n    this._beforeFinishCallbacks.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public initSpanRecorder(maxlen?: number): void {\n    if (!this.spanRecorder) {\n      const pushActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._pushActivity(id);\n      };\n      const popActivity = (id: string): void => {\n        if (this._finished) {\n          return;\n        }\n        this._popActivity(id);\n      };\n\n      this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen);\n\n      // Start heartbeat so that transactions do not run forever.\n      __DEBUG_BUILD__ && logger.log('Starting heartbeat');\n      this._pingHeartbeat();\n    }\n    this.spanRecorder.add(this);\n  }\n\n  /**\n   * Cancels the existing idle timeout, if there is one.\n   * @param restartOnChildSpanChange Default is `true`.\n   *                                 If set to false the transaction will end\n   *                                 with the last child span.\n   */\n  public cancelIdleTimeout(\n    endTimestamp?: Parameters<IdleTransaction['finish']>[0],\n    {\n      restartOnChildSpanChange,\n    }: {\n      restartOnChildSpanChange?: boolean;\n    } = {\n      restartOnChildSpanChange: true,\n    },\n  ): void {\n    this._idleTimeoutCanceledPermanently = restartOnChildSpanChange === false;\n    if (this._idleTimeoutID) {\n      clearTimeout(this._idleTimeoutID);\n      this._idleTimeoutID = undefined;\n\n      if (Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n        this.finish(endTimestamp);\n      }\n    }\n  }\n\n  /**\n   * Temporary method used to externally set the transaction's `finishReason`\n   *\n   * ** WARNING**\n   * This is for the purpose of experimentation only and will be removed in the near future, do not use!\n   *\n   * @internal\n   *\n   */\n  public setFinishReason(reason: string): void {\n    this._finishReason = reason;\n  }\n\n  /**\n   * Restarts idle timeout, if there is no running idle timeout it will start one.\n   */\n  private _restartIdleTimeout(endTimestamp?: Parameters<IdleTransaction['finish']>[0]): void {\n    this.cancelIdleTimeout();\n    this._idleTimeoutID = setTimeout(() => {\n      if (!this._finished && Object.keys(this.activities).length === 0) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[1];\n        this.finish(endTimestamp);\n      }\n    }, this._idleTimeout);\n  }\n\n  /**\n   * Start tracking a specific activity.\n   * @param spanId The span id that represents the activity\n   */\n  private _pushActivity(spanId: string): void {\n    this.cancelIdleTimeout(undefined, { restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently });\n    __DEBUG_BUILD__ && logger.log(`[Tracing] pushActivity: ${spanId}`);\n    this.activities[spanId] = true;\n    __DEBUG_BUILD__ && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n  }\n\n  /**\n   * Remove an activity from usage\n   * @param spanId The span id that represents the activity\n   */\n  private _popActivity(spanId: string): void {\n    if (this.activities[spanId]) {\n      __DEBUG_BUILD__ && logger.log(`[Tracing] popActivity ${spanId}`);\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this.activities[spanId];\n      __DEBUG_BUILD__ && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n    }\n\n    if (Object.keys(this.activities).length === 0) {\n      const endTimestamp = timestampInSeconds();\n      if (this._idleTimeoutCanceledPermanently) {\n        this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[5];\n        this.finish(endTimestamp);\n      } else {\n        // We need to add the timeout here to have the real endtimestamp of the transaction\n        // Remember timestampInSeconds is in seconds, timeout is in ms\n        this._restartIdleTimeout(endTimestamp + this._idleTimeout / 1000);\n      }\n    }\n  }\n\n  /**\n   * Checks when entries of this.activities are not changing for 3 beats.\n   * If this occurs we finish the transaction.\n   */\n  private _beat(): void {\n    // We should not be running heartbeat if the idle transaction is finished.\n    if (this._finished) {\n      return;\n    }\n\n    const heartbeatString = Object.keys(this.activities).join('');\n\n    if (heartbeatString === this._prevHeartbeatString) {\n      this._heartbeatCounter++;\n    } else {\n      this._heartbeatCounter = 1;\n    }\n\n    this._prevHeartbeatString = heartbeatString;\n\n    if (this._heartbeatCounter >= 3) {\n      __DEBUG_BUILD__ && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n      this.setStatus('deadline_exceeded');\n      this._finishReason = IDLE_TRANSACTION_FINISH_REASONS[0];\n      this.finish();\n    } else {\n      this._pingHeartbeat();\n    }\n  }\n\n  /**\n   * Pings the heartbeat\n   */\n  private _pingHeartbeat(): void {\n    __DEBUG_BUILD__ && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n    setTimeout(() => {\n      this._beat();\n    }, this._heartbeatInterval);\n  }\n}\n", "import type { ClientOptions, CustomSamplingContext, Options, SamplingContext, TransactionContext } from '@sentry/types';\nimport { isNaN, logger } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getMainCarrier } from '../hub';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { Transaction } from './transaction';\n\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders(this: Hub): { [key: string]: string } {\n  const scope = this.getScope();\n  const span = scope.getSpan();\n\n  return span\n    ? {\n        'sentry-trace': span.toTraceparent(),\n      }\n    : {};\n}\n\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * @param transaction: The transaction needing a sampling decision\n * @param options: The current client's options, so we can access `tracesSampleRate` and/or `tracesSampler`\n * @param samplingContext: Default and user-provided data which may be used to help make the decision\n *\n * @returns The given transaction with its `sampled` value set\n */\nfunction sample<T extends Transaction>(\n  transaction: T,\n  options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,\n  samplingContext: SamplingContext,\n): T {\n  // nothing to do if tracing is not enabled\n  if (!hasTracingEnabled(options)) {\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n  if (transaction.sampled !== undefined) {\n    transaction.setMetadata({\n      sampleRate: Number(transaction.sampled),\n    });\n    return transaction;\n  }\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler(samplingContext);\n    transaction.setMetadata({\n      sampleRate: Number(sampleRate),\n    });\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    transaction.setMetadata({\n      sampleRate: Number(sampleRate),\n    });\n  } else {\n    // When `enableTracing === true`, we use a sample rate of 100%\n    sampleRate = 1;\n    transaction.setMetadata({\n      sampleRate,\n    });\n  }\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n  // only valid values are booleans or numbers between 0 and 1.)\n  if (!isValidSampleRate(sampleRate)) {\n    __DEBUG_BUILD__ && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n  if (!sampleRate) {\n    __DEBUG_BUILD__ &&\n      logger.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    transaction.sampled = false;\n    return transaction;\n  }\n\n  // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n  // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n  transaction.sampled = Math.random() < (sampleRate as number | boolean);\n\n  // if we're not going to keep it, we're done\n  if (!transaction.sampled) {\n    __DEBUG_BUILD__ &&\n      logger.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n    return transaction;\n  }\n\n  __DEBUG_BUILD__ && logger.log(`[Tracing] starting ${transaction.op} transaction - ${transaction.name}`);\n  return transaction;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate: unknown): boolean {\n  // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\n\n  // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n  if (rate < 0 || rate > 1) {\n    __DEBUG_BUILD__ &&\n      logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${rate}.`);\n    return false;\n  }\n  return true;\n}\n\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(\n  this: Hub,\n  transactionContext: TransactionContext,\n  customSamplingContext?: CustomSamplingContext,\n): Transaction {\n  const client = this.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  const configInstrumenter = options.instrumenter || 'sentry';\n  const transactionInstrumenter = transactionContext.instrumenter || 'sentry';\n\n  if (configInstrumenter !== transactionInstrumenter) {\n    __DEBUG_BUILD__ &&\n      logger.error(\n        `A transaction was started with instrumenter=\\`${transactionInstrumenter}\\`, but the SDK is configured with the \\`${configInstrumenter}\\` instrumenter.\nThe transaction will not be sampled. Please use the ${configInstrumenter} instrumentation to start transactions.`,\n      );\n\n    transactionContext.sampled = false;\n  }\n\n  let transaction = new Transaction(transactionContext, this);\n  transaction = sample(transaction, options, {\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    ...customSamplingContext,\n  });\n  if (transaction.sampled) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(\n  hub: Hub,\n  transactionContext: TransactionContext,\n  idleTimeout: number,\n  finalTimeout: number,\n  onScope?: boolean,\n  customSamplingContext?: CustomSamplingContext,\n  heartbeatInterval?: number,\n): IdleTransaction {\n  const client = hub.getClient();\n  const options: Partial<ClientOptions> = (client && client.getOptions()) || {};\n\n  let transaction = new IdleTransaction(transactionContext, hub, idleTimeout, finalTimeout, heartbeatInterval, onScope);\n  transaction = sample(transaction, options, {\n    parentSampled: transactionContext.parentSampled,\n    transactionContext,\n    ...customSamplingContext,\n  });\n  if (transaction.sampled) {\n    transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans as number));\n  }\n  if (client && client.emit) {\n    client.emit('startTransaction', transaction);\n  }\n  return transaction;\n}\n\n/**\n * Adds tracing extensions to the global hub.\n */\nexport function addTracingExtensions(): void {\n  const carrier = getMainCarrier();\n  if (!carrier.__SENTRY__) {\n    return;\n  }\n  carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n  if (!carrier.__SENTRY__.extensions.startTransaction) {\n    carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n  }\n  if (!carrier.__SENTRY__.extensions.traceHeaders) {\n    carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n  }\n\n  registerErrorInstrumentation();\n}\n", "/** The status of an Span.\n *\n * @deprecated Use string literals - if you require type casting, cast to SpanStatusType type\n */\n// eslint-disable-next-line import/export\nexport enum SpanStatus {\n  /** The operation completed successfully. */\n  Ok = 'ok',\n  /** Deadline expired before operation could complete. */\n  DeadlineExceeded = 'deadline_exceeded',\n  /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n  Unauthenticated = 'unauthenticated',\n  /** 403 Forbidden */\n  PermissionDenied = 'permission_denied',\n  /** 404 Not Found. Some requested entity (file or directory) was not found. */\n  NotFound = 'not_found',\n  /** 429 Too Many Requests */\n  ResourceExhausted = 'resource_exhausted',\n  /** Client specified an invalid argument. 4xx. */\n  InvalidArgument = 'invalid_argument',\n  /** 501 Not Implemented */\n  Unimplemented = 'unimplemented',\n  /** 503 Service Unavailable */\n  Unavailable = 'unavailable',\n  /** Other/generic 5xx. */\n  InternalError = 'internal_error',\n  /** Unknown. Any non-standard HTTP status code. */\n  UnknownError = 'unknown_error',\n  /** The operation was cancelled (typically by the user). */\n  Cancelled = 'cancelled',\n  /** Already exists (409) */\n  AlreadyExists = 'already_exists',\n  /** Operation was rejected because the system is not in a state required for the operation's */\n  FailedPrecondition = 'failed_precondition',\n  /** The operation was aborted, typically due to a concurrency issue. */\n  Aborted = 'aborted',\n  /** Operation was attempted past the valid range. */\n  OutOfRange = 'out_of_range',\n  /** Unrecoverable data loss or corruption */\n  DataLoss = 'data_loss',\n}\n", "import type { TransactionContext } from '@sentry/types';\nimport { isThenable } from '@sentry/utils';\n\nimport type { Hub } from '../hub';\nimport { getCurrentHub } from '../hub';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport type { Span } from './span';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n *\n * This function is meant to be used internally and may break at any time. Use at your own risk.\n *\n * @internal\n * @private\n */\nexport function trace<T>(\n  context: TransactionContext,\n  callback: (span?: Span) => T,\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onError: (error: unknown) => void = () => {},\n): T {\n  const ctx = normalizeContext(context);\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n\n  scope.setSpan(activeSpan);\n\n  function finishAndSetSpan(): void {\n    activeSpan && activeSpan.finish();\n    hub.getScope().setSpan(parentSpan);\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback(activeSpan);\n  } catch (e) {\n    activeSpan && activeSpan.setStatus('internal_error');\n    onError(e);\n    finishAndSetSpan();\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishAndSetSpan();\n      },\n      e => {\n        activeSpan && activeSpan.setStatus('internal_error');\n        onError(e);\n        finishAndSetSpan();\n      },\n    );\n  } else {\n    finishAndSetSpan();\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {\n  const ctx = normalizeContext(context);\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n  scope.setSpan(activeSpan);\n\n  function finishAndSetSpan(): void {\n    activeSpan && activeSpan.finish();\n    hub.getScope().setSpan(parentSpan);\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback(activeSpan);\n  } catch (e) {\n    activeSpan && activeSpan.setStatus('internal_error');\n    finishAndSetSpan();\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishAndSetSpan();\n      },\n      () => {\n        activeSpan && activeSpan.setStatus('internal_error');\n        finishAndSetSpan();\n      },\n    );\n  } else {\n    finishAndSetSpan();\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * @deprecated Use {@link startSpan} instead.\n */\nexport const startActiveSpan = startSpan;\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startSpanManual<T>(\n  context: TransactionContext,\n  callback: (span: Span | undefined, finish: () => void) => T,\n): T {\n  const ctx = normalizeContext(context);\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const activeSpan = createChildSpanOrTransaction(hub, parentSpan, ctx);\n  scope.setSpan(activeSpan);\n\n  function finishAndSetSpan(): void {\n    activeSpan && activeSpan.finish();\n    hub.getScope().setSpan(parentSpan);\n  }\n\n  let maybePromiseResult: T;\n  try {\n    maybePromiseResult = callback(activeSpan, finishAndSetSpan);\n  } catch (e) {\n    activeSpan && activeSpan.setStatus('internal_error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(undefined, () => {\n      activeSpan && activeSpan.setStatus('internal_error');\n    });\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * Note that if you have not enabled tracing extensions via `addTracingExtensions`\n * or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans\n * and the `span` returned from the callback will be undefined.\n */\nexport function startInactiveSpan(context: TransactionContext): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n\n  const ctx = { ...context };\n  // If a name is set and a description is not, set the description to the name.\n  if (ctx.name !== undefined && ctx.description === undefined) {\n    ctx.description = ctx.name;\n  }\n\n  const hub = getCurrentHub();\n  const parentSpan = getActiveSpan();\n  return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  return getCurrentHub().getScope().getSpan();\n}\n\nfunction createChildSpanOrTransaction(\n  hub: Hub,\n  parentSpan: Span | undefined,\n  ctx: TransactionContext,\n): Span | undefined {\n  if (!hasTracingEnabled()) {\n    return undefined;\n  }\n  return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);\n}\n\nfunction normalizeContext(context: TransactionContext): TransactionContext {\n  const ctx = { ...context };\n  // If a name is set and a description is not, set the description to the name.\n  if (ctx.name !== undefined && ctx.description === undefined) {\n    ctx.description = ctx.name;\n  }\n\n  return ctx;\n}\n", "import type { MeasurementUnit } from '@sentry/types';\n\nimport { getActiveTransaction } from './utils';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit): void {\n  const transaction = getActiveTransaction();\n  if (transaction) {\n    transaction.setMeasurement(name, value, unit);\n  }\n}\n", "import type {\n  Breadcrumb,\n  CaptureContext,\n  CheckIn,\n  CustomSamplingContext,\n  Event,\n  EventHint,\n  Extra,\n  Extras,\n  MonitorConfig,\n  Primitive,\n  Severity,\n  SeverityLevel,\n  TransactionContext,\n  User,\n} from '@sentry/types';\nimport { logger, uuid4 } from '@sentry/utils';\n\nimport type { Hub } from './hub';\nimport { getCurrentHub } from './hub';\nimport type { Scope } from './scope';\n\n// Note: All functions in this file are typed with a return value of `ReturnType<Hub[HUB_FUNCTION]>`,\n// where HUB_FUNCTION is some method on the Hub class.\n//\n// This is done to make sure the top level SDK methods stay in sync with the hub methods.\n// Although every method here has an explicit return type, some of them (that map to void returns) do not\n// contain `return` keywords. This is done to save on bundle size, as `return` is not minifiable.\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @param captureContext Additional scope data to apply to exception event.\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): ReturnType<Hub['captureException']> {\n  return getCurrentHub().captureException(exception, { captureContext });\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 Severity Define the level of the message.\n * @returns The generated eventId.\n */\nexport function captureMessage(\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext?: CaptureContext | Severity | SeverityLevel,\n): ReturnType<Hub['captureMessage']> {\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  return getCurrentHub().captureMessage(message, level, context);\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, hint?: EventHint): ReturnType<Hub['captureEvent']> {\n  return getCurrentHub().captureEvent(event, hint);\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): ReturnType<Hub['configureScope']> {\n  getCurrentHub().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): ReturnType<Hub['addBreadcrumb']> {\n  getCurrentHub().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): ReturnType<Hub['setContext']> {\n  getCurrentHub().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): ReturnType<Hub['setExtras']> {\n  getCurrentHub().setExtras(extras);\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): ReturnType<Hub['setExtra']> {\n  getCurrentHub().setExtra(key, extra);\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 }): ReturnType<Hub['setTags']> {\n  getCurrentHub().setTags(tags);\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): ReturnType<Hub['setTag']> {\n  getCurrentHub().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): ReturnType<Hub['setUser']> {\n  getCurrentHub().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): ReturnType<Hub['withScope']> {\n  getCurrentHub().withScope(callback);\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 * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\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): ReturnType<Hub['startTransaction']> {\n  return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const client = hub.getClient();\n  if (!client) {\n    __DEBUG_BUILD__ && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    __DEBUG_BUILD__ && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  __DEBUG_BUILD__ && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  __DEBUG_BUILD__ && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\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", "import type {\n  AggregationCounts,\n  Client,\n  RequestSessionStatus,\n  SessionAggregates,\n  SessionFlusherLike,\n} from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { getCurrentHub } from './hub';\n\ntype ReleaseHealthAttributes = {\n  environment?: string;\n  release: string;\n};\n\n/**\n * @inheritdoc\n */\nexport class SessionFlusher implements SessionFlusherLike {\n  public readonly flushTimeout: number;\n  private _pendingAggregates: Record<number, AggregationCounts>;\n  private _sessionAttrs: ReleaseHealthAttributes;\n  private _intervalId: ReturnType<typeof setInterval>;\n  private _isEnabled: boolean;\n  private _client: Client;\n\n  public constructor(client: Client, attrs: ReleaseHealthAttributes) {\n    this._client = client;\n    this.flushTimeout = 60;\n    this._pendingAggregates = {};\n    this._isEnabled = true;\n\n    // Call to setInterval, so that flush is called every 60 seconds\n    this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1000);\n    this._sessionAttrs = attrs;\n  }\n\n  /** Checks if `pendingAggregates` has entries, and if it does flushes them by calling `sendSession` */\n  public flush(): void {\n    const sessionAggregates = this.getSessionAggregates();\n    if (sessionAggregates.aggregates.length === 0) {\n      return;\n    }\n    this._pendingAggregates = {};\n    this._client.sendSession(sessionAggregates);\n  }\n\n  /** Massages the entries in `pendingAggregates` and returns aggregated sessions */\n  public getSessionAggregates(): SessionAggregates {\n    const aggregates: AggregationCounts[] = Object.keys(this._pendingAggregates).map((key: string) => {\n      return this._pendingAggregates[parseInt(key)];\n    });\n\n    const sessionAggregates: SessionAggregates = {\n      attrs: this._sessionAttrs,\n      aggregates,\n    };\n    return dropUndefinedKeys(sessionAggregates);\n  }\n\n  /** JSDoc */\n  public close(): void {\n    clearInterval(this._intervalId);\n    this._isEnabled = false;\n    this.flush();\n  }\n\n  /**\n   * Wrapper function for _incrementSessionStatusCount that checks if the instance of SessionFlusher is enabled then\n   * fetches the session status of the request from `Scope.getRequestSession().status` on the scope and passes them to\n   * `_incrementSessionStatusCount` along with the start date\n   */\n  public incrementSessionStatusCount(): void {\n    if (!this._isEnabled) {\n      return;\n    }\n    const scope = getCurrentHub().getScope();\n    const requestSession = scope.getRequestSession();\n\n    if (requestSession && requestSession.status) {\n      this._incrementSessionStatusCount(requestSession.status, new Date());\n      // This is not entirely necessarily but is added as a safe guard to indicate the bounds of a request and so in\n      // case captureRequestSession is called more than once to prevent double count\n      scope.setRequestSession(undefined);\n      /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n    }\n  }\n\n  /**\n   * Increments status bucket in pendingAggregates buffer (internal state) corresponding to status of\n   * the session received\n   */\n  private _incrementSessionStatusCount(status: RequestSessionStatus, date: Date): number {\n    // Truncate minutes and seconds on Session Started attribute to have one minute bucket keys\n    const sessionStartedTrunc = new Date(date).setSeconds(0, 0);\n    this._pendingAggregates[sessionStartedTrunc] = this._pendingAggregates[sessionStartedTrunc] || {};\n\n    // corresponds to aggregated sessions in one specific minute bucket\n    // for example, {\"started\":\"2021-03-16T08:00:00.000Z\",\"exited\":4, \"errored\": 1}\n    const aggregationCounts: AggregationCounts = this._pendingAggregates[sessionStartedTrunc];\n    if (!aggregationCounts.started) {\n      aggregationCounts.started = new Date(sessionStartedTrunc).toISOString();\n    }\n\n    switch (status) {\n      case 'errored':\n        aggregationCounts.errored = (aggregationCounts.errored || 0) + 1;\n        return aggregationCounts.errored;\n      case 'ok':\n        aggregationCounts.exited = (aggregationCounts.exited || 0) + 1;\n        return aggregationCounts.exited;\n      default:\n        aggregationCounts.crashed = (aggregationCounts.crashed || 0) + 1;\n        return aggregationCounts.crashed;\n    }\n  }\n}\n", "import type { ClientOptions, DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\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 ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n  return urlEncode({\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    sentry_key: dsn.publicKey,\n    sentry_version: SENTRY_API_VERSION,\n    ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n  });\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 */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(\n  dsn: DsnComponents,\n  // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n  // options: ClientOptions = {} as ClientOptions,\n  tunnelOrOptions: string | ClientOptions = {} as ClientOptions,\n): string {\n  // TODO (v8): Use this code instead\n  // const { tunnel, _metadata = {} } = options;\n  // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n  const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n  const sdkInfo =\n    typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n  dsnLike: DsnLike,\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 = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n", "import type {\n  DsnComponents,\n  Event,\n  EventEnvelope,\n  EventItem,\n  SdkInfo,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  SessionEnvelope,\n  SessionItem,\n} from '@sentry/types';\nimport {\n  createEnvelope,\n  createEventEnvelopeHeaders,\n  dsnToString,\n  getSdkMetadataForEnvelopeHeader,\n} from '@sentry/utils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nexport function createSessionEnvelope(\n  session: Session | SessionAggregates,\n  dsn: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): SessionEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && { dsn: dsnToString(dsn) }),\n  };\n\n  const envelopeItem: SessionItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope<SessionEnvelope>(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nexport function createEventEnvelope(\n  event: Event,\n  dsn: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): EventEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjut a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem: EventItem = [{ type: eventType }, event];\n  return createEnvelope<EventEnvelope>(envelopeHeaders, [eventItem]);\n}\n", "import type { Client, Integration, Options } from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\n\nimport { getCurrentHub } from './hub';\nimport { addGlobalEventProcessor } from './scope';\n\ndeclare module '@sentry/types' {\n  interface Integration {\n    isDefaultInstance?: boolean;\n  }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n  [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n  const integrationsByName: { [key: string]: Integration } = {};\n\n  integrations.forEach(currentInstance => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Options): Integration[] {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach(integration => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations: Integration[];\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    integrations = arrayify(userIntegrations(defaultIntegrations));\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  const finalIntegrations = filterDuplicates(integrations);\n\n  // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n  // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n  // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n  // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n  const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n  if (debugIndex !== -1) {\n    const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n    finalIntegrations.push(debugInstance);\n  }\n\n  return finalIntegrations;\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(client: Client, integrations: Integration[]): IntegrationIndex {\n  const integrationIndex: IntegrationIndex = {};\n\n  integrations.forEach(integration => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/** Setup a single integration.  */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n  integrationIndex[integration.name] = integration;\n\n  if (installedIntegrations.indexOf(integration.name) === -1) {\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n  }\n\n  if (client.on && typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration);\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  __DEBUG_BUILD__ && logger.log(`Integration installed: ${integration.name}`);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex<T>(arr: T[], callback: (item: T) => boolean): number {\n  for (let i = 0; i < arr.length; i++) {\n    if (callback(arr[i]) === true) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n", "import type { ClientOptions, Event, EventHint, StackFrame, StackParser } from '@sentry/types';\nimport { dateTimestampInSeconds, GLOBAL_OBJ, normalize, resolvedSyncPromise, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { Scope } from '../scope';\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 * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\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 * @hidden\n */\nexport function prepareEvent(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n  scope?: Scope,\n): PromiseLike<Event | null> {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n  const prepared: Event = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\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.captureContext) {\n    finalScope = Scope.clone(finalScope).update(hint.captureContext);\n  }\n\n  // We prepare the result here with a resolved Event.\n  let result = resolvedSyncPromise<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  //\n  // We need to check for the existence of `finalScope.getAttachments`\n  // because `getAttachments` can be undefined if users are using an older version\n  // of `@sentry/core` that does not have the `getAttachments` method.\n  // See: https://github.com/getsentry/sentry-javascript/issues/5229\n  if (finalScope) {\n    // Collect attachments from the hint and scope\n    if (finalScope.getAttachments) {\n      const attachments = [...(hint.attachments || []), ...finalScope.getAttachments()];\n\n      if (attachments.length) {\n        hint.attachments = attachments;\n      }\n    }\n\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 (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\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 */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  if (!('environment' in event)) {\n    event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\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\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return;\n  }\n\n  let debugIdStackFramesCache: Map<string, StackFrame[]>;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map<string, StackFrame[]>();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n    let parsedStack: StackFrame[];\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      if (stackFrame.filename) {\n        acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event!.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.filename) {\n          frame.debug_id = filenameDebugIdMap[frame.filename];\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap: Record<string, string> = {};\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace!.frames!.forEach(frame => {\n        if (frame.debug_id) {\n          if (frame.abs_path) {\n            filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n          } else if (frame.filename) {\n            filenameDebugIdMap[frame.filename] = frame.debug_id;\n          }\n          delete frame.debug_id;\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.keys(filenameDebugIdMap).forEach(filename => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id: filenameDebugIdMap[filename],\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\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 */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n  if (!event) {\n    return null;\n  }\n\n  const normalized: Event = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\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 && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      // We cannot use the spread operator here because `toJSON` on `span` is non-enumerable\n      if (span.data) {\n        span.data = normalize(span.data, depth, maxBreadth);\n      }\n      return span;\n    });\n  }\n\n  return normalized;\n}\n", "/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  ClientOptions,\n  DataCategory,\n  DsnComponents,\n  DynamicSamplingContext,\n  Envelope,\n  ErrorEvent,\n  Event,\n  EventDropReason,\n  EventHint,\n  Integration,\n  IntegrationClass,\n  Outcome,\n  PropagationContext,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  Severity,\n  SeverityLevel,\n  Transaction,\n  TransactionEvent,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n  addItemToEnvelope,\n  checkOrSetAlreadyCaught,\n  createAttachmentEnvelopeItem,\n  isPlainObject,\n  isPrimitive,\n  isThenable,\n  logger,\n  makeDsn,\n  rejectedSyncPromise,\n  resolvedSyncPromise,\n  SentryError,\n  SyncPromise,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport type { IntegrationIndex } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\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, 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<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class BaseClient<O extends ClientOptions> implements Client<O> {\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?: DsnComponents;\n\n  protected readonly _transport?: Transport;\n\n  /** Array of set up integrations. */\n  protected _integrations: IntegrationIndex;\n\n  /** Indicates whether this client's integrations have been set up. */\n  protected _integrationsInitialized: boolean;\n\n  /** Number of calls being processed */\n  protected _numProcessing: number;\n\n  /** Holds flushable  */\n  private _outcomes: { [key: string]: number };\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  private _hooks: Record<string, Function[]>;\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  protected constructor(options: O) {\n    this._options = options;\n    this._integrations = {};\n    this._integrationsInitialized = false;\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      __DEBUG_BUILD__ && logger.warn('No DSN provided, client will not do anything.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n      this._transport = options.transport({\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\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    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      __DEBUG_BUILD__ && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._process(\n      this.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(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level?: Severity | SeverityLevel,\n    hint?: EventHint,\n    scope?: Scope,\n  ): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(String(message), level, hint)\n      : this.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    // ensure we haven't captured this very object before\n    if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      __DEBUG_BUILD__ && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\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 (!this._isEnabled()) {\n      __DEBUG_BUILD__ && logger.warn('SDK not enabled, will not capture session.');\n      return;\n    }\n\n    if (!(typeof session.release === 'string')) {\n      __DEBUG_BUILD__ && logger.warn('Discarded session because of missing or non-string release');\n    } else {\n      this.sendSession(session);\n      // After sending, we set init false to indicate it's not the first occurrence\n      updateSession(session, { init: false });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getDsn(): DsnComponents | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * @see SdkMetadata in @sentry/types\n   *\n   * @return The metadata of the SDK\n   */\n  public getSdkMetadata(): SdkMetadata | undefined {\n    return this._options._metadata;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransport(): Transport | undefined {\n    return this._transport;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(timeout?: number): PromiseLike<boolean> {\n    const transport = this._transport;\n    if (transport) {\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\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() && !this._integrationsInitialized) {\n      this._integrations = setupIntegrations(this, this._options.integrations);\n      this._integrationsInitialized = true;\n    }\n  }\n\n  /**\n   * Gets an installed integration by its `id`.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n   */\n  public getIntegrationById(integrationId: string): Integration | undefined {\n    return this._integrations[integrationId];\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      __DEBUG_BUILD__ && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addIntegration(integration: Integration): void {\n    setupIntegration(this, integration, this._integrations);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event, hint: EventHint = {}): void {\n    this.emit('beforeSendEvent', event, hint);\n\n    if (this._dsn) {\n      let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n      for (const attachment of hint.attachments || []) {\n        env = addItemToEnvelope(\n          env,\n          createAttachmentEnvelopeItem(\n            attachment,\n            this._options.transportOptions && this._options.transportOptions.textEncoder,\n          ),\n        );\n      }\n\n      const promise = this._sendEnvelope(env);\n      if (promise) {\n        promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n      }\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendSession(session: Session | SessionAggregates): void {\n    if (this._dsn) {\n      const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n      void this._sendEnvelope(env);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public recordDroppedEvent(reason: EventDropReason, category: DataCategory, _event?: Event): void {\n    // Note: we use `event` in replay, where we overwrite this hook.\n\n    if (this._options.sendClientReports) {\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      __DEBUG_BUILD__ && logger.log(`Adding outcome: \"${key}\"`);\n\n      // The following works because undefined + 1 === NaN and NaN is falsy\n      this._outcomes[key] = this._outcomes[key] + 1 || 1;\n    }\n  }\n\n  // Keep on() & emit() signatures in sync with types' client.ts interface\n  /* eslint-disable @typescript-eslint/unified-signatures */\n\n  /** @inheritdoc */\n  public on(hook: 'startTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'finishTransaction', callback: (transaction: Transaction) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n  /** @inheritdoc */\n  public on(\n    hook: 'afterSendEvent',\n    callback: (event: Event, sendResponse: TransportMakeRequestResponse | void) => void,\n  ): void;\n\n  /** @inheritdoc */\n  public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: 'otelSpanEnd', callback: (otelSpan: unknown, mutableOptions: { drop: boolean }) => void): void;\n\n  /** @inheritdoc */\n  public on(hook: string, callback: unknown): void {\n    if (!this._hooks[hook]) {\n      this._hooks[hook] = [];\n    }\n\n    // @ts-expect-error We assue the types are correct\n    this._hooks[hook].push(callback);\n  }\n\n  /** @inheritdoc */\n  public emit(hook: 'startTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'finishTransaction', transaction: Transaction): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse | void): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n  /** @inheritdoc */\n  public emit(hook: 'otelSpanEnd', otelSpan: unknown, mutableOptions: { drop: boolean }): void;\n\n  /** @inheritdoc */\n  public emit(hook: string, ...rest: unknown[]): void {\n    if (this._hooks[hook]) {\n      this._hooks[hook].forEach(callback => callback(...rest));\n    }\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\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    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    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n  protected _isClientDoneProcessing(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._numProcessing == 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  /** 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, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations.length > 0) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    return prepareEvent(options, event, hint, scope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      // If a trace context is not set on the event, we use the propagationContext set on the event to\n      // generate a trace context. If the propagationContext does not have a dynamic sampling context, we\n      // also generate one for it.\n      const { propagationContext } = evt.sdkProcessingMetadata || {};\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext as PropagationContext;\n        evt.contexts = {\n          trace: {\n            trace_id,\n            span_id: spanId,\n            parent_span_id: parentSpanId,\n          },\n          ...evt.contexts,\n        };\n\n        const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n        evt.sdkProcessingMetadata = {\n          dynamicSamplingContext,\n          ...evt.sdkProcessingMetadata,\n        };\n      }\n      return evt;\n    });\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        if (__DEBUG_BUILD__) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          const sentryError = reason as SentryError;\n          if (sentryError.logLevel === 'log') {\n            logger.log(sentryError.message);\n          } else {\n            logger.warn(sentryError);\n          }\n        }\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    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    if (!this._isEnabled()) {\n      return rejectedSyncPromise(new SentryError('SDK not enabled, will not capture event.', 'log'));\n    }\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error', event);\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n    return this._prepareEvent(event, hint, scope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory, event);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory, event);\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = scope && scope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\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,\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._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  protected _sendEnvelope(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> | void {\n    if (this._transport && this._dsn) {\n      this.emit('beforeEnvelope', envelope);\n\n      return this._transport.send(envelope).then(null, reason => {\n        __DEBUG_BUILD__ && logger.error('Error while sending event:', reason);\n      });\n    } else {\n      __DEBUG_BUILD__ && logger.error('Transport disabled');\n    }\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  protected _clearOutcomes(): Outcome[] {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.keys(outcomes).map(key => {\n      const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n      return {\n        reason,\n        category,\n        quantity: outcomes[key],\n      };\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 abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike<Event>;\n\n  /**\n   * @inheritDoc\n   */\n  public abstract eventFromMessage(\n    _message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    _level?: Severity | SeverityLevel,\n    _hint?: EventHint,\n  ): PromiseLike<Event>;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult: PromiseLike<Event | null> | Event | null,\n  beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n  const { beforeSend, beforeSendTransaction } = options;\n\n  if (isErrorEvent(event) && beforeSend) {\n    return beforeSend(event, hint);\n  }\n\n  if (isTransactionEvent(event) && beforeSendTransaction) {\n    return beforeSendTransaction(event, hint);\n  }\n\n  return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n", "import type {\n  CheckInEvelope,\n  CheckInItem,\n  DsnComponents,\n  DynamicSamplingContext,\n  SdkMetadata,\n  SerializedCheckIn,\n} from '@sentry/types';\nimport { createEnvelope, dropUndefinedKeys, dsnToString } from '@sentry/utils';\n\n/**\n * Create envelope from check in item.\n */\nexport function createCheckInEnvelope(\n  checkIn: SerializedCheckIn,\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n  dsn?: DsnComponents,\n): CheckInEvelope {\n  const headers: CheckInEvelope[0] = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata && metadata.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  if (dynamicSamplingContext) {\n    headers.trace = dropUndefinedKeys(dynamicSamplingContext) as DynamicSamplingContext;\n  }\n\n  const item = createCheckInEnvelopeItem(checkIn);\n  return createEnvelope<CheckInEvelope>(headers, [item]);\n}\n\nfunction createCheckInEnvelopeItem(checkIn: SerializedCheckIn): CheckInItem {\n  const checkInHeaders: CheckInItem[0] = {\n    type: 'check_in',\n  };\n  return [checkInHeaders, checkIn];\n}\n", "import type {\n  BaseTransportOptions,\n  CheckIn,\n  ClientOptions,\n  DynamicSamplingContext,\n  Event,\n  EventHint,\n  MonitorConfig,\n  SerializedCheckIn,\n  Severity,\n  SeverityLevel,\n  TraceContext,\n} from '@sentry/types';\nimport { eventFromMessage, eventFromUnknownInput, logger, uuid4 } from '@sentry/utils';\n\nimport { BaseClient } from './baseclient';\nimport { createCheckInEnvelope } from './checkin';\nimport { getCurrentHub } from './hub';\nimport type { Scope } from './scope';\nimport { addTracingExtensions, getDynamicSamplingContextFromClient } from './tracing';\n\nexport interface ServerRuntimeClientOptions extends ClientOptions<BaseTransportOptions> {\n  platform?: string;\n  runtime?: { name: string; version?: string };\n  serverName?: string;\n}\n\n/**\n * The Sentry Server Runtime Client SDK.\n */\nexport class ServerRuntimeClient<\n  O extends ClientOptions & ServerRuntimeClientOptions = ServerRuntimeClientOptions,\n> extends BaseClient<O> {\n  /**\n   * Creates a new Edge SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: O) {\n    // Server clients always support tracing\n    addTracingExtensions();\n\n    super(options);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    return Promise.resolve(eventFromUnknownInput(getCurrentHub, this._options.stackParser, exception, hint));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return Promise.resolve(\n      eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n    );\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   */\n  public captureCheckIn(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string {\n    const id = checkIn.status !== 'in_progress' && checkIn.checkInId ? checkIn.checkInId : uuid4();\n    if (!this._isEnabled()) {\n      __DEBUG_BUILD__ && logger.warn('SDK not enabled, will not capture checkin.');\n      return id;\n    }\n\n    const options = this.getOptions();\n    const { release, environment, tunnel } = options;\n\n    const serializedCheckIn: SerializedCheckIn = {\n      check_in_id: id,\n      monitor_slug: checkIn.monitorSlug,\n      status: checkIn.status,\n      release,\n      environment,\n    };\n\n    if (checkIn.status !== 'in_progress') {\n      serializedCheckIn.duration = checkIn.duration;\n    }\n\n    if (monitorConfig) {\n      serializedCheckIn.monitor_config = {\n        schedule: monitorConfig.schedule,\n        checkin_margin: monitorConfig.checkinMargin,\n        max_runtime: monitorConfig.maxRuntime,\n        timezone: monitorConfig.timezone,\n      };\n    }\n\n    const [dynamicSamplingContext, traceContext] = this._getTraceInfoFromScope(scope);\n    if (traceContext) {\n      serializedCheckIn.contexts = {\n        trace: traceContext,\n      };\n    }\n\n    const envelope = createCheckInEnvelope(\n      serializedCheckIn,\n      dynamicSamplingContext,\n      this.getSdkMetadata(),\n      tunnel,\n      this.getDsn(),\n    );\n\n    __DEBUG_BUILD__ && logger.info('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n    void this._sendEnvelope(envelope);\n    return id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n    if (this._options.platform) {\n      event.platform = event.platform || this._options.platform;\n    }\n\n    if (this._options.runtime) {\n      event.contexts = {\n        ...event.contexts,\n        runtime: (event.contexts || {}).runtime || this._options.runtime,\n      };\n    }\n\n    if (this._options.serverName) {\n      event.server_name = event.server_name || this._options.serverName;\n    }\n\n    return super._prepareEvent(event, hint, scope);\n  }\n\n  /** Extract trace information from scope */\n  private _getTraceInfoFromScope(\n    scope: Scope | undefined,\n  ): [dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined, traceContext: TraceContext | undefined] {\n    if (!scope) {\n      return [undefined, undefined];\n    }\n\n    const span = scope.getSpan();\n    if (span) {\n      const samplingContext = span.transaction ? span.transaction.getDynamicSamplingContext() : undefined;\n      return [samplingContext, span.getTraceContext()];\n    }\n\n    const { traceId, spanId, parentSpanId, dsc } = scope.getPropagationContext();\n    const traceContext: TraceContext = {\n      trace_id: traceId,\n      span_id: spanId,\n      parent_span_id: parentSpanId,\n    };\n    if (dsc) {\n      return [dsc, traceContext];\n    }\n\n    return [getDynamicSamplingContextFromClient(traceId, this, scope), traceContext];\n  }\n}\n", "import type { Client, ClientOptions } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { getCurrentHub } from './hub';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass<F extends Client, O extends ClientOptions> = 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 ClientOptions>(\n  clientClass: ClientClass<F, O>,\n  options: O,\n): void {\n  if (options.debug === true) {\n    if (__DEBUG_BUILD__) {\n      logger.enable();\n    } else {\n      // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n      // eslint-disable-next-line no-console\n      console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n    }\n  }\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  hub.bindClient(client);\n}\n", "import type {\n  Envelope,\n  EnvelopeItem,\n  EnvelopeItemType,\n  Event,\n  EventDropReason,\n  EventItem,\n  InternalBaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n  createEnvelope,\n  envelopeItemTypeToDataCategory,\n  forEachEnvelopeItem,\n  isRateLimited,\n  logger,\n  makePromiseBuffer,\n  resolvedSyncPromise,\n  SentryError,\n  serializeEnvelope,\n  updateRateLimits,\n} from '@sentry/utils';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n  options: InternalBaseTransportOptions,\n  makeRequest: TransportRequestExecutor,\n  buffer: PromiseBuffer<void | TransportMakeRequestResponse> = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n): Transport {\n  let rateLimits: RateLimits = {};\n  const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n  function send(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> {\n    const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const envelopeItemDataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, envelopeItemDataCategory)) {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', envelopeItemDataCategory, event);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason: EventDropReason): void => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        const event: Event | undefined = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n      });\n    };\n\n    const requestTask = (): PromiseLike<void | TransportMakeRequestResponse> =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            __DEBUG_BUILD__ && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          __DEBUG_BUILD__ && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise();\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  // We use this to identifify if the transport is the base transport\n  // TODO (v8): Remove this again as we'll no longer need it\n  send.__sentry__baseTransport__ = true;\n\n  return {\n    send,\n    flush,\n  };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n  if (type !== 'event' && type !== 'transaction') {\n    return undefined;\n  }\n\n  return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n", "import type { Envelope, InternalBaseTransportOptions, Transport, TransportMakeRequestResponse } from '@sentry/types';\nimport { envelopeContainsItemType, logger, parseRetryAfterHeader } from '@sentry/utils';\n\nexport const MIN_DELAY = 100; // 100 ms\nexport const START_DELAY = 5_000; // 5 seconds\nconst MAX_DELAY = 3.6e6; // 1 hour\n\nfunction log(msg: string, error?: Error): void {\n  __DEBUG_BUILD__ && logger.info(`[Offline]: ${msg}`, error);\n}\n\nexport interface OfflineStore {\n  insert(env: Envelope): Promise<void>;\n  pop(): Promise<Envelope | undefined>;\n}\n\nexport type CreateOfflineStore = (options: OfflineTransportOptions) => OfflineStore;\n\nexport interface OfflineTransportOptions extends InternalBaseTransportOptions {\n  /**\n   * A function that creates the offline store instance.\n   */\n  createStore?: CreateOfflineStore;\n\n  /**\n   * Flush the offline store shortly after startup.\n   *\n   * Defaults: false\n   */\n  flushAtStartup?: boolean;\n\n  /**\n   * Called before an event is stored.\n   *\n   * Return false to drop the envelope rather than store it.\n   *\n   * @param envelope The envelope that failed to send.\n   * @param error The error that occurred.\n   * @param retryDelay The current retry delay in milliseconds.\n   */\n  shouldStore?: (envelope: Envelope, error: Error, retryDelay: number) => boolean | Promise<boolean>;\n}\n\ntype Timer = number | { unref?: () => void };\n\n/**\n * Wraps a transport and stores and retries events when they fail to send.\n *\n * @param createTransport The transport to wrap.\n */\nexport function makeOfflineTransport<TO>(\n  createTransport: (options: TO) => Transport,\n): (options: TO & OfflineTransportOptions) => Transport {\n  return options => {\n    const transport = createTransport(options);\n    const store = options.createStore ? options.createStore(options) : undefined;\n\n    let retryDelay = START_DELAY;\n    let flushTimer: Timer | undefined;\n\n    function shouldQueue(env: Envelope, error: Error, retryDelay: number): boolean | Promise<boolean> {\n      // We don't queue Session Replay envelopes because they are:\n      // - Ordered and Replay relies on the response status to know when they're successfully sent.\n      // - Likely to fill the queue quickly and block other events from being sent.\n      // We also want to drop client reports because they can be generated when we retry sending events while offline.\n      if (envelopeContainsItemType(env, ['replay_event', 'replay_recording', 'client_report'])) {\n        return false;\n      }\n\n      if (options.shouldStore) {\n        return options.shouldStore(env, error, retryDelay);\n      }\n\n      return true;\n    }\n\n    function flushIn(delay: number): void {\n      if (!store) {\n        return;\n      }\n\n      if (flushTimer) {\n        clearTimeout(flushTimer as ReturnType<typeof setTimeout>);\n      }\n\n      flushTimer = setTimeout(async () => {\n        flushTimer = undefined;\n\n        const found = await store.pop();\n        if (found) {\n          log('Attempting to send previously queued event');\n          void send(found).catch(e => {\n            log('Failed to retry sending', e);\n          });\n        }\n      }, delay) as Timer;\n\n      // We need to unref the timer in node.js, otherwise the node process never exit.\n      if (typeof flushTimer !== 'number' && flushTimer.unref) {\n        flushTimer.unref();\n      }\n    }\n\n    function flushWithBackOff(): void {\n      if (flushTimer) {\n        return;\n      }\n\n      flushIn(retryDelay);\n\n      retryDelay = Math.min(retryDelay * 2, MAX_DELAY);\n    }\n\n    async function send(envelope: Envelope): Promise<void | TransportMakeRequestResponse> {\n      try {\n        const result = await transport.send(envelope);\n\n        let delay = MIN_DELAY;\n\n        if (result) {\n          // If there's a retry-after header, use that as the next delay.\n          if (result.headers && result.headers['retry-after']) {\n            delay = parseRetryAfterHeader(result.headers['retry-after']);\n          } // If we have a server error, return now so we don't flush the queue.\n          else if ((result.statusCode || 0) >= 400) {\n            return result;\n          }\n        }\n\n        flushIn(delay);\n        retryDelay = START_DELAY;\n        return result;\n      } catch (e) {\n        if (store && (await shouldQueue(envelope, e as Error, retryDelay))) {\n          await store.insert(envelope);\n          flushWithBackOff();\n          log('Error sending. Event queued', e as Error);\n          return {};\n        } else {\n          throw e;\n        }\n      }\n    }\n\n    if (options.flushAtStartup) {\n      flushWithBackOff();\n    }\n\n    return {\n      send,\n      flush: t => transport.flush(t),\n    };\n  };\n}\n", "import type {\n  BaseTransportOptions,\n  Envelope,\n  EnvelopeItemType,\n  Event,\n  EventItem,\n  Transport,\n  TransportMakeRequestResponse,\n} from '@sentry/types';\nimport { dsnFromString, forEachEnvelopeItem } from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from '../api';\n\ninterface MatchParam {\n  /** The envelope to be sent */\n  envelope: Envelope;\n  /**\n   * A function that returns an event from the envelope if one exists. You can optionally pass an array of envelope item\n   * types to filter by - only envelopes matching the given types will be multiplexed.\n   * Allowed values are: 'event', 'transaction', 'profile', 'replay_event'\n   *\n   * @param types Defaults to ['event']\n   */\n  getEvent(types?: EnvelopeItemType[]): Event | undefined;\n}\n\ntype RouteTo = { dsn: string; release: string };\ntype Matcher = (param: MatchParam) => (string | RouteTo)[];\n\n/**\n * Gets an event from an envelope.\n *\n * This is only exported for use in the tests\n */\nexport function eventFromEnvelope(env: Envelope, types: EnvelopeItemType[]): Event | undefined {\n  let event: Event | undefined;\n\n  forEachEnvelopeItem(env, (item, type) => {\n    if (types.includes(type)) {\n      event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n    }\n    // bail out if we found an event\n    return !!event;\n  });\n\n  return event;\n}\n\n/**\n * Creates a transport that overrides the release on all events.\n */\nfunction makeOverrideReleaseTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  release: string,\n): (options: TO) => Transport {\n  return options => {\n    const transport = createTransport(options);\n\n    return {\n      send: async (envelope: Envelope): Promise<void | TransportMakeRequestResponse> => {\n        const event = eventFromEnvelope(envelope, ['event', 'transaction', 'profile', 'replay_event']);\n\n        if (event) {\n          event.release = release;\n        }\n        return transport.send(envelope);\n      },\n      flush: timeout => transport.flush(timeout),\n    };\n  };\n}\n\n/**\n * Creates a transport that can send events to different DSNs depending on the envelope contents.\n */\nexport function makeMultiplexedTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  matcher: Matcher,\n): (options: TO) => Transport {\n  return options => {\n    const fallbackTransport = createTransport(options);\n    const otherTransports: Record<string, Transport> = {};\n\n    function getTransport(dsn: string, release: string | undefined): Transport | undefined {\n      // We create a transport for every unique dsn/release combination as there may be code from multiple releases in\n      // use at the same time\n      const key = release ? `${dsn}:${release}` : dsn;\n\n      if (!otherTransports[key]) {\n        const validatedDsn = dsnFromString(dsn);\n        if (!validatedDsn) {\n          return undefined;\n        }\n        const url = getEnvelopeEndpointWithUrlEncodedAuth(validatedDsn);\n\n        otherTransports[key] = release\n          ? makeOverrideReleaseTransport(createTransport, release)({ ...options, url })\n          : createTransport({ ...options, url });\n      }\n\n      return otherTransports[key];\n    }\n\n    async function send(envelope: Envelope): Promise<void | TransportMakeRequestResponse> {\n      function getEvent(types?: EnvelopeItemType[]): Event | undefined {\n        const eventTypes: EnvelopeItemType[] = types && types.length ? types : ['event'];\n        return eventFromEnvelope(envelope, eventTypes);\n      }\n\n      const transports = matcher({ envelope, getEvent })\n        .map(result => {\n          if (typeof result === 'string') {\n            return getTransport(result, undefined);\n          } else {\n            return getTransport(result.dsn, result.release);\n          }\n        })\n        .filter((t): t is Transport => !!t);\n\n      // If we have no transports to send to, use the fallback transport\n      if (transports.length === 0) {\n        transports.push(fallbackTransport);\n      }\n\n      const results = await Promise.all(transports.map(transport => transport.send(envelope)));\n\n      return results[0];\n    }\n\n    async function flush(timeout: number | undefined): Promise<boolean> {\n      const allTransports = [...Object.keys(otherTransports).map(dsn => otherTransports[dsn]), fallbackTransport];\n      const results = await Promise.all(allTransports.map(transport => transport.flush(timeout)));\n      return results.every(r => r);\n    }\n\n    return {\n      send,\n      flush,\n    };\n  };\n}\n", "export const SDK_VERSION = '7.69.0';\n", "import type { Integration, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\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;\n\n  public constructor() {\n    this.name = FunctionToString.id;\n  }\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    // intrinsics (like Function.prototype) might be immutable in some environments\n    // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n        const context = getOriginalFunction(this) || this;\n        return originalFunctionToString.apply(context, args);\n      };\n    } catch {\n      // ignore errors here, just don't patch this\n    }\n  }\n}\n", "import type { Event, EventProcessor, Hub, Integration, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } 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\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n  /^.*healthcheck.*$/,\n  /^.*healthy.*$/,\n  /^.*live.*$/,\n  /^.*ready.*$/,\n  /^.*heartbeat.*$/,\n  /^.*\\/health$/,\n  /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n  allowUrls: Array<string | RegExp>;\n  denyUrls: Array<string | RegExp>;\n  ignoreErrors: Array<string | RegExp>;\n  ignoreTransactions: Array<string | RegExp>;\n  ignoreInternal: boolean;\n  disableErrorDefaults: boolean;\n  disableTransactionDefaults: boolean;\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;\n\n  private readonly _options: Partial<InboundFiltersOptions>;\n\n  public constructor(options: Partial<InboundFiltersOptions> = {}) {\n    this.name = InboundFilters.id;\n    this._options = options;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (processor: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    const eventProcess: EventProcessor = (event: Event) => {\n      const hub = getCurrentHub();\n      if (hub) {\n        const self = hub.getIntegration(InboundFilters);\n        if (self) {\n          const client = hub.getClient();\n          const clientOptions = client ? client.getOptions() : {};\n          const options = _mergeOptions(self._options, clientOptions);\n          return _shouldDropEvent(event, options) ? null : event;\n        }\n      }\n      return event;\n    };\n\n    eventProcess.id = this.name;\n    addGlobalEventProcessor(eventProcess);\n  }\n}\n\n/** JSDoc */\nexport function _mergeOptions(\n  internalOptions: Partial<InboundFiltersOptions> = {},\n  clientOptions: Partial<InboundFiltersOptions> = {},\n): Partial<InboundFiltersOptions> {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [\n      ...(internalOptions.ignoreTransactions || []),\n      ...(clientOptions.ignoreTransactions || []),\n      ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n    ],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\n/** JSDoc */\nexport function _shouldDropEvent(event: Event, options: Partial<InboundFiltersOptions>): boolean {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    __DEBUG_BUILD__ &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!denyUrls || !denyUrls.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n  // TODO: Use Glob instead?\n  if (!allowUrls || !allowUrls.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n  const possibleMessages: string[] = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  let lastException;\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    lastException = event.exception.values[event.exception.values.length - 1];\n  } catch (e) {\n    // try catching to save bundle size checking existence of variables\n  }\n\n  if (lastException) {\n    if (lastException.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  }\n\n  if (__DEBUG_BUILD__ && possibleMessages.length === 0) {\n    logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n  }\n\n  return possibleMessages;\n}\n\nfunction _isSentryError(event: Event): boolean {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n  try {\n    let frames;\n    try {\n      // @ts-expect-error we only care about frames if the whole thing here is defined\n      frames = event.exception.values[0].stacktrace.frames;\n    } catch (e) {\n      // ignore\n    }\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    __DEBUG_BUILD__ && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst functiontostring = require('./functiontostring.js');\nconst inboundfilters = require('./inboundfilters.js');\n\n\n\nexports.FunctionToString = functiontostring.FunctionToString;\nexports.InboundFilters = inboundfilters.InboundFilters;\n//# sourceMappingURL=index.js.map\n", "import type { Event, StackParser } from '@sentry/types';\nimport { GLOBAL_OBJ } from '@sentry/utils';\n\n/** Keys are source filename/url, values are metadata objects. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst filenameMetadataMap = new Map<string, any>();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set<string>();\n\nfunction ensureMetadataStacksAreParsed(parser: StackParser): void {\n  if (!GLOBAL_OBJ._sentryModuleMetadata) {\n    return;\n  }\n\n  for (const stack of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) {\n    const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack];\n\n    if (parsedStacks.has(stack)) {\n      continue;\n    }\n\n    // Ensure this stack doesn't get parsed again\n    parsedStacks.add(stack);\n\n    const frames = parser(stack);\n\n    // Go through the frames starting from the top of the stack and find the first one with a filename\n    for (const frame of frames.reverse()) {\n      if (frame.filename) {\n        // Save the metadata for this filename\n        filenameMetadataMap.set(frame.filename, metadata);\n        break;\n      }\n    }\n  }\n}\n\n/**\n * Retrieve metadata for a specific JavaScript file URL.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getMetadataForUrl(parser: StackParser, filename: string): any | undefined {\n  ensureMetadataStacksAreParsed(parser);\n  return filenameMetadataMap.get(filename);\n}\n\n/**\n * Adds metadata to stack frames.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\nexport function addMetadataToStackFrames(parser: StackParser, event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        if (!frame.filename) {\n          continue;\n        }\n\n        const metadata = getMetadataForUrl(parser, frame.filename);\n\n        if (metadata) {\n          frame.module_metadata = metadata;\n        }\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Strips metadata from stack frames.\n */\nexport function stripMetadataFromStackFrames(event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        delete frame.module_metadata;\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n", "import type { EventItem, EventProcessor, Hub, Integration } from '@sentry/types';\nimport { forEachEnvelopeItem } from '@sentry/utils';\n\nimport { addMetadataToStackFrames, stripMetadataFromStackFrames } from '../metadata';\n\n/**\n * Adds module metadata to stack frames.\n *\n * Metadata can be injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n *\n * When this integration is added, the metadata passed to the bundler plugin is added to the stack frames of all events\n * under the `module_metadata` property. This can be used to help in tagging or routing of events from different teams\n * our sources\n */\nexport class ModuleMetadata implements Integration {\n  /*\n   * @inheritDoc\n   */\n  public static id: string = 'ModuleMetadata';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  public constructor() {\n    this.name = ModuleMetadata.id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (processor: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    const client = getCurrentHub().getClient();\n\n    if (!client || typeof client.on !== 'function') {\n      return;\n    }\n\n    // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n    client.on('beforeEnvelope', envelope => {\n      forEachEnvelopeItem(envelope, (item, type) => {\n        if (type === 'event') {\n          const event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n\n          if (event) {\n            stripMetadataFromStackFrames(event);\n            item[1] = event;\n          }\n        }\n      });\n    });\n\n    const stackParser = client.getOptions().stackParser;\n\n    addGlobalEventProcessor(event => {\n      addMetadataToStackFrames(stackParser, event);\n      return event;\n    });\n  }\n}\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst hubextensions = require('./tracing/hubextensions.js');\nconst idletransaction = require('./tracing/idletransaction.js');\nconst span = require('./tracing/span.js');\nconst transaction = require('./tracing/transaction.js');\nconst utils$1 = require('./tracing/utils.js');\nconst spanstatus = require('./tracing/spanstatus.js');\nconst trace = require('./tracing/trace.js');\nconst dynamicSamplingContext = require('./tracing/dynamicSamplingContext.js');\nconst measurement = require('./tracing/measurement.js');\nconst exports$1 = require('./exports.js');\nconst hub = require('./hub.js');\nconst session = require('./session.js');\nconst sessionflusher = require('./sessionflusher.js');\nconst scope = require('./scope.js');\nconst api = require('./api.js');\nconst baseclient = require('./baseclient.js');\nconst serverRuntimeClient = require('./server-runtime-client.js');\nconst sdk = require('./sdk.js');\nconst base = require('./transports/base.js');\nconst offline = require('./transports/offline.js');\nconst multiplexed = require('./transports/multiplexed.js');\nconst version = require('./version.js');\nconst integration = require('./integration.js');\nconst index = require('./integrations/index.js');\nconst prepareEvent = require('./utils/prepareEvent.js');\nconst checkin = require('./checkin.js');\nconst hasTracingEnabled = require('./utils/hasTracingEnabled.js');\nconst constants = require('./constants.js');\nconst metadata = require('./integrations/metadata.js');\nconst functiontostring = require('./integrations/functiontostring.js');\nconst inboundfilters = require('./integrations/inboundfilters.js');\nconst utils = require('@sentry/utils');\n\n\n\nexports.addTracingExtensions = hubextensions.addTracingExtensions;\nexports.startIdleTransaction = hubextensions.startIdleTransaction;\nexports.IdleTransaction = idletransaction.IdleTransaction;\nexports.TRACING_DEFAULTS = idletransaction.TRACING_DEFAULTS;\nexports.Span = span.Span;\nexports.spanStatusfromHttpCode = span.spanStatusfromHttpCode;\nexports.Transaction = transaction.Transaction;\nexports.getActiveTransaction = utils$1.getActiveTransaction;\nObject.defineProperty(exports, 'SpanStatus', {\n  enumerable: true,\n  get: () => spanstatus.SpanStatus\n});\nexports.getActiveSpan = trace.getActiveSpan;\nexports.startActiveSpan = trace.startActiveSpan;\nexports.startInactiveSpan = trace.startInactiveSpan;\nexports.startSpan = trace.startSpan;\nexports.startSpanManual = trace.startSpanManual;\nexports.trace = trace.trace;\nexports.getDynamicSamplingContextFromClient = dynamicSamplingContext.getDynamicSamplingContextFromClient;\nexports.setMeasurement = measurement.setMeasurement;\nexports.addBreadcrumb = exports$1.addBreadcrumb;\nexports.captureCheckIn = exports$1.captureCheckIn;\nexports.captureEvent = exports$1.captureEvent;\nexports.captureException = exports$1.captureException;\nexports.captureMessage = exports$1.captureMessage;\nexports.close = exports$1.close;\nexports.configureScope = exports$1.configureScope;\nexports.flush = exports$1.flush;\nexports.lastEventId = exports$1.lastEventId;\nexports.setContext = exports$1.setContext;\nexports.setExtra = exports$1.setExtra;\nexports.setExtras = exports$1.setExtras;\nexports.setTag = exports$1.setTag;\nexports.setTags = exports$1.setTags;\nexports.setUser = exports$1.setUser;\nexports.startTransaction = exports$1.startTransaction;\nexports.withScope = exports$1.withScope;\nexports.Hub = hub.Hub;\nexports.ensureHubOnCarrier = hub.ensureHubOnCarrier;\nexports.getCurrentHub = hub.getCurrentHub;\nexports.getHubFromCarrier = hub.getHubFromCarrier;\nexports.getMainCarrier = hub.getMainCarrier;\nexports.makeMain = hub.makeMain;\nexports.runWithAsyncContext = hub.runWithAsyncContext;\nexports.setAsyncContextStrategy = hub.setAsyncContextStrategy;\nexports.setHubOnCarrier = hub.setHubOnCarrier;\nexports.closeSession = session.closeSession;\nexports.makeSession = session.makeSession;\nexports.updateSession = session.updateSession;\nexports.SessionFlusher = sessionflusher.SessionFlusher;\nexports.Scope = scope.Scope;\nexports.addGlobalEventProcessor = scope.addGlobalEventProcessor;\nexports.getEnvelopeEndpointWithUrlEncodedAuth = api.getEnvelopeEndpointWithUrlEncodedAuth;\nexports.getReportDialogEndpoint = api.getReportDialogEndpoint;\nexports.BaseClient = baseclient.BaseClient;\nexports.ServerRuntimeClient = serverRuntimeClient.ServerRuntimeClient;\nexports.initAndBind = sdk.initAndBind;\nexports.createTransport = base.createTransport;\nexports.makeOfflineTransport = offline.makeOfflineTransport;\nexports.makeMultiplexedTransport = multiplexed.makeMultiplexedTransport;\nexports.SDK_VERSION = version.SDK_VERSION;\nexports.getIntegrationsToSetup = integration.getIntegrationsToSetup;\nexports.Integrations = index;\nexports.prepareEvent = prepareEvent.prepareEvent;\nexports.createCheckInEnvelope = checkin.createCheckInEnvelope;\nexports.hasTracingEnabled = hasTracingEnabled.hasTracingEnabled;\nexports.DEFAULT_ENVIRONMENT = constants.DEFAULT_ENVIRONMENT;\nexports.ModuleMetadata = metadata.ModuleMetadata;\nexports.FunctionToString = functiontostring.FunctionToString;\nexports.InboundFilters = inboundfilters.InboundFilters;\nexports.extractTraceparentData = utils.extractTraceparentData;\n//# sourceMappingURL=index.js.map\n", "// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nexport function _nullishCoalesce(lhs: unknown, rhsFn: () => unknown): unknown {\n  // by checking for loose equality to `null`, we catch both `null` and `undefined`\n  return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n//   if (lhs != null) {\n//     return lhs;\n//   } else {\n//     return rhsFn();\n//   }\n// }\n", "// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { _nullishCoalesce } from './_nullishCoalesce';\n\n/**\n * Polyfill for the nullish coalescing operator (`??`), when used in situations where at least one of the values is the\n * result of an async operation.\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nexport async function _asyncNullishCoalesce(lhs: unknown, rhsFn: () => unknown): Promise<unknown> {\n  return _nullishCoalesce(lhs, rhsFn);\n}\n\n// Sucrase version:\n// async function _asyncNullishCoalesce(lhs, rhsFn) {\n//   if (lhs != null) {\n//     return lhs;\n//   } else {\n//     return await rhsFn();\n//   }\n// }\n", "// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { GenericFunction } from './types';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions, for situations in which at least one part of the expression is async.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase) See\n * https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nexport async function _asyncOptionalChain(ops: unknown[]): Promise<unknown> {\n  let lastAccessLHS: unknown = undefined;\n  let value = ops[0];\n  let i = 1;\n  while (i < ops.length) {\n    const op = ops[i] as string;\n    const fn = ops[i + 1] as (intermediateValue: unknown) => Promise<unknown>;\n    i += 2;\n    // by checking for loose equality to `null`, we catch both `null` and `undefined`\n    if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n      // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n      return;\n    }\n    if (op === 'access' || op === 'optionalAccess') {\n      lastAccessLHS = value;\n      value = await fn(value);\n    } else if (op === 'call' || op === 'optionalCall') {\n      value = await fn((...args: unknown[]) => (value as GenericFunction).call(lastAccessLHS, ...args));\n      lastAccessLHS = undefined;\n    }\n  }\n  return value;\n}\n\n// Sucrase version:\n// async function _asyncOptionalChain(ops) {\n//   let lastAccessLHS = undefined;\n//   let value = ops[0];\n//   let i = 1;\n//   while (i < ops.length) {\n//     const op = ops[i];\n//     const fn = ops[i + 1];\n//     i += 2;\n//     if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n//       return undefined;\n//     }\n//     if (op === 'access' || op === 'optionalAccess') {\n//       lastAccessLHS = value;\n//       value = await fn(value);\n//     } else if (op === 'call' || op === 'optionalCall') {\n//       value = await fn((...args) => value.call(lastAccessLHS, ...args));\n//       lastAccessLHS = undefined;\n//     }\n//   }\n//   return value;\n// }\n", "// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { _asyncOptionalChain } from './_asyncOptionalChain';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions, in cases where the value of the expression is to be deleted.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase) See\n * https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The return value of the `delete` operator: `true`, unless the deletion target is an own, non-configurable\n * property (one which can't be deleted or turned into an accessor, and whose enumerability can't be changed), in which\n * case `false`.\n */\nexport async function _asyncOptionalChainDelete(ops: unknown[]): Promise<boolean> {\n  const result = (await _asyncOptionalChain(ops)) as Promise<boolean | null>;\n  // If `result` is `null`, it means we didn't get to the end of the chain and so nothing was deleted (in which case,\n  // return `true` since that's what `delete` does when it no-ops). If it's non-null, we know the delete happened, in\n  // which case we return whatever the `delete` returned, which will be a boolean.\n  return result == null ? true : (result as Promise<boolean>);\n}\n\n// Sucrase version:\n// async function asyncOptionalChainDelete(ops) {\n//   const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops);\n//   return result == null ? true : result;\n// }\n", "// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { GenericFunction } from './types';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nexport function _optionalChain(ops: unknown[]): unknown {\n  let lastAccessLHS: unknown = undefined;\n  let value = ops[0];\n  let i = 1;\n  while (i < ops.length) {\n    const op = ops[i] as string;\n    const fn = ops[i + 1] as (intermediateValue: unknown) => unknown;\n    i += 2;\n    // by checking for loose equality to `null`, we catch both `null` and `undefined`\n    if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n      // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n      return;\n    }\n    if (op === 'access' || op === 'optionalAccess') {\n      lastAccessLHS = value;\n      value = fn(value);\n    } else if (op === 'call' || op === 'optionalCall') {\n      value = fn((...args: unknown[]) => (value as GenericFunction).call(lastAccessLHS, ...args));\n      lastAccessLHS = undefined;\n    }\n  }\n  return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n//   let lastAccessLHS = undefined;\n//   let value = ops[0];\n//   let i = 1;\n//   while (i < ops.length) {\n//     const op = ops[i];\n//     const fn = ops[i + 1];\n//     i += 2;\n//     if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n//       return undefined;\n//     }\n//     if (op === 'access' || op === 'optionalAccess') {\n//       lastAccessLHS = value;\n//       value = fn(value);\n//     } else if (op === 'call' || op === 'optionalCall') {\n//       value = fn((...args) => value.call(lastAccessLHS, ...args));\n//       lastAccessLHS = undefined;\n//     }\n//   }\n//   return value;\n// }\n", "// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { _optionalChain } from './_optionalChain';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions, in cases where the value of the expression is to be deleted.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase) See\n * https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The return value of the `delete` operator: `true`, unless the deletion target is an own, non-configurable\n * property (one which can't be deleted or turned into an accessor, and whose enumerability can't be changed), in which\n * case `false`.\n */\nexport function _optionalChainDelete(ops: unknown[]): boolean {\n  const result = _optionalChain(ops) as boolean | null;\n  // If `result` is `null`, it means we didn't get to the end of the chain and so nothing was deleted (in which case,\n  // return `true` since that's what `delete` does when it no-ops). If it's non-null, we know the delete happened, in\n  // which case we return whatever the `delete` returned, which will be a boolean.\n  return result == null ? true : result;\n}\n\n// Sucrase version:\n// function _optionalChainDelete(ops) {\n//   const result = _optionalChain(ops);\n//   // by checking for loose equality to `null`, we catch both `null` and `undefined`\n//   return result == null ? true : result;\n// }\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst _asyncNullishCoalesce = require('./_asyncNullishCoalesce.js');\nconst _asyncOptionalChain = require('./_asyncOptionalChain.js');\nconst _asyncOptionalChainDelete = require('./_asyncOptionalChainDelete.js');\nconst _nullishCoalesce = require('./_nullishCoalesce.js');\nconst _optionalChain = require('./_optionalChain.js');\nconst _optionalChainDelete = require('./_optionalChainDelete.js');\n\n\n\nexports._asyncNullishCoalesce = _asyncNullishCoalesce._asyncNullishCoalesce;\nexports._asyncOptionalChain = _asyncOptionalChain._asyncOptionalChain;\nexports._asyncOptionalChainDelete = _asyncOptionalChainDelete._asyncOptionalChainDelete;\nexports._nullishCoalesce = _nullishCoalesce._nullishCoalesce;\nexports._optionalChain = _optionalChain._optionalChain;\nexports._optionalChainDelete = _optionalChainDelete._optionalChainDelete;\n//# sourceMappingURL=index.js.map\n", "import type { Hub } from '@sentry/types';\n\n/**\n * Check if Sentry auto-instrumentation should be disabled.\n *\n * @param getCurrentHub A method to fetch the current hub\n * @returns boolean\n */\nexport function shouldDisableAutoInstrumentation(getCurrentHub: () => Hub): boolean {\n  const clientOptions = getCurrentHub().getClient()?.getOptions();\n  const instrumenter = clientOptions?.instrumenter || 'sentry';\n\n  return instrumenter !== 'sentry';\n}\n", "/* eslint-disable max-lines */\nimport type { Hub, Integration, PolymorphicRequest, Transaction } from '@sentry/types';\nimport {\n  extractPathForTransaction,\n  getNumberOfUrlSegments,\n  isRegExp,\n  logger,\n  stripUrlQueryAndFragment,\n} from '@sentry/utils';\n\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\ntype Method =\n  | 'all'\n  | 'get'\n  | 'post'\n  | 'put'\n  | 'delete'\n  | 'patch'\n  | 'options'\n  | 'head'\n  | 'checkout'\n  | 'copy'\n  | 'lock'\n  | 'merge'\n  | 'mkactivity'\n  | 'mkcol'\n  | 'move'\n  | 'm-search'\n  | 'notify'\n  | 'purge'\n  | 'report'\n  | 'search'\n  | 'subscribe'\n  | 'trace'\n  | 'unlock'\n  | 'unsubscribe'\n  | 'use';\n\ntype Router = {\n  [method in Method]: (...args: any) => any; // eslint-disable-line @typescript-eslint/no-explicit-any\n};\n\n/* Extend the PolymorphicRequest type with a patched parameter to build a reconstructed route */\ntype PatchedRequest = PolymorphicRequest & { _reconstructedRoute?: string; _hasParameters?: boolean };\n\n/* Types used for patching the express router prototype */\ntype ExpressRouter = Router & {\n  _router?: ExpressRouter;\n  stack?: Layer[];\n  lazyrouter?: () => void;\n  settings?: unknown;\n  process_params: (\n    layer: Layer,\n    called: unknown,\n    req: PatchedRequest,\n    res: ExpressResponse,\n    done: () => void,\n  ) => unknown;\n};\n\ntype Layer = {\n  match: (path: string) => boolean;\n  handle_request: (req: PatchedRequest, res: ExpressResponse, next: () => void) => void;\n  route?: { path: RouteType | RouteType[] };\n  path?: string;\n};\n\ntype RouteType = string | RegExp;\n\ninterface ExpressResponse {\n  once(name: string, callback: () => void): void;\n}\n\n/**\n * Internal helper for `__sentry_transaction`\n * @hidden\n */\ninterface SentryTracingResponse {\n  __sentry_transaction?: Transaction;\n}\n\n/**\n * Express integration\n *\n * Provides an request and error handler for Express framework as well as tracing capabilities\n */\nexport class Express implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Express';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * Express App instance\n   */\n  private readonly _router?: Router;\n  private readonly _methods?: Method[];\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { app?: Router; router?: Router; methods?: Method[] } = {}) {\n    this.name = Express.id;\n    this._router = options.router || options.app;\n    this._methods = (Array.isArray(options.methods) ? options.methods : []).concat('use');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: unknown, getCurrentHub: () => Hub): void {\n    if (!this._router) {\n      __DEBUG_BUILD__ && logger.error('ExpressIntegration is missing an Express instance');\n      return;\n    }\n\n    if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n      __DEBUG_BUILD__ && logger.log('Express Integration is skipped because of instrumenter configuration.');\n      return;\n    }\n\n    instrumentMiddlewares(this._router, this._methods);\n    instrumentRouter(this._router as ExpressRouter);\n  }\n}\n\n/**\n * Wraps original middleware function in a tracing call, which stores the info about the call as a span,\n * and finishes it once the middleware is done invoking.\n *\n * Express middlewares have 3 various forms, thus we have to take care of all of them:\n * // sync\n * app.use(function (req, res) { ... })\n * // async\n * app.use(function (req, res, next) { ... })\n * // error handler\n * app.use(function (err, req, res, next) { ... })\n *\n * They all internally delegate to the `router[method]` of the given application instance.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any\nfunction wrap(fn: Function, method: Method): (...args: any[]) => void {\n  const arity = fn.length;\n\n  switch (arity) {\n    case 2: {\n      return function (this: NodeJS.Global, req: unknown, res: ExpressResponse & SentryTracingResponse): void {\n        const transaction = res.__sentry_transaction;\n        if (transaction) {\n          const span = transaction.startChild({\n            description: fn.name,\n            op: `middleware.express.${method}`,\n            origin: 'auto.middleware.express',\n          });\n          res.once('finish', () => {\n            span.finish();\n          });\n        }\n        return fn.call(this, req, res);\n      };\n    }\n    case 3: {\n      return function (\n        this: NodeJS.Global,\n        req: unknown,\n        res: ExpressResponse & SentryTracingResponse,\n        next: () => void,\n      ): void {\n        const transaction = res.__sentry_transaction;\n        const span = transaction?.startChild({\n          description: fn.name,\n          op: `middleware.express.${method}`,\n          origin: 'auto.middleware.express',\n        });\n        fn.call(this, req, res, function (this: NodeJS.Global, ...args: unknown[]): void {\n          span?.finish();\n          next.call(this, ...args);\n        });\n      };\n    }\n    case 4: {\n      return function (\n        this: NodeJS.Global,\n        err: Error,\n        req: Request,\n        res: Response & SentryTracingResponse,\n        next: () => void,\n      ): void {\n        const transaction = res.__sentry_transaction;\n        const span = transaction?.startChild({\n          description: fn.name,\n          op: `middleware.express.${method}`,\n          origin: 'auto.middleware.express',\n        });\n        fn.call(this, err, req, res, function (this: NodeJS.Global, ...args: unknown[]): void {\n          span?.finish();\n          next.call(this, ...args);\n        });\n      };\n    }\n    default: {\n      throw new Error(`Express middleware takes 2-4 arguments. Got: ${arity}`);\n    }\n  }\n}\n\n/**\n * Takes all the function arguments passed to the original `app` or `router` method, eg. `app.use` or `router.use`\n * and wraps every function, as well as array of functions with a call to our `wrap` method.\n * We have to take care of the arrays as well as iterate over all of the arguments,\n * as `app.use` can accept middlewares in few various forms.\n *\n * app.use([<path>], <fn>)\n * app.use([<path>], <fn>, ...<fn>)\n * app.use([<path>], ...<fn>[])\n */\nfunction wrapMiddlewareArgs(args: unknown[], method: Method): unknown[] {\n  return args.map((arg: unknown) => {\n    if (typeof arg === 'function') {\n      return wrap(arg, method);\n    }\n\n    if (Array.isArray(arg)) {\n      return arg.map((a: unknown) => {\n        if (typeof a === 'function') {\n          return wrap(a, method);\n        }\n        return a;\n      });\n    }\n\n    return arg;\n  });\n}\n\n/**\n * Patches original router to utilize our tracing functionality\n */\nfunction patchMiddleware(router: Router, method: Method): Router {\n  const originalCallback = router[method];\n\n  router[method] = function (...args: unknown[]): void {\n    return originalCallback.call(this, ...wrapMiddlewareArgs(args, method));\n  };\n\n  return router;\n}\n\n/**\n * Patches original router methods\n */\nfunction instrumentMiddlewares(router: Router, methods: Method[] = []): void {\n  methods.forEach((method: Method) => patchMiddleware(router, method));\n}\n\n/**\n * Patches the prototype of Express.Router to accumulate the resolved route\n * if a layer instance's `match` function was called and it returned a successful match.\n *\n * @see https://github.com/expressjs/express/blob/master/lib/router/index.js\n *\n * @param appOrRouter the router instance which can either be an app (i.e. top-level) or a (nested) router.\n */\nfunction instrumentRouter(appOrRouter: ExpressRouter): void {\n  // This is how we can distinguish between app and routers\n  const isApp = 'settings' in appOrRouter;\n\n  // In case the app's top-level router hasn't been initialized yet, we have to do it now\n  if (isApp && appOrRouter._router === undefined && appOrRouter.lazyrouter) {\n    appOrRouter.lazyrouter();\n  }\n\n  const router = isApp ? appOrRouter._router : appOrRouter;\n\n  if (!router) {\n    /*\n    If we end up here, this means likely that this integration is used with Express 3 or Express 5.\n    For now, we don't support these versions (3 is very old and 5 is still in beta). To support Express 5,\n    we'd need to make more changes to the routing instrumentation because the router is no longer part of\n    the Express core package but maintained in its own package. The new router has different function\n    signatures and works slightly differently, demanding more changes than just taking the router from\n    `app.router` instead of `app._router`.\n    @see https://github.com/pillarjs/router\n\n    TODO: Proper Express 5 support\n    */\n    __DEBUG_BUILD__ && logger.debug('Cannot instrument router for URL Parameterization (did not find a valid router).');\n    __DEBUG_BUILD__ && logger.debug('Routing instrumentation is currently only supported in Express 4.');\n    return;\n  }\n\n  const routerProto = Object.getPrototypeOf(router) as ExpressRouter;\n\n  const originalProcessParams = routerProto.process_params;\n  routerProto.process_params = function process_params(\n    layer: Layer,\n    called: unknown,\n    req: PatchedRequest,\n    res: ExpressResponse & SentryTracingResponse,\n    done: () => unknown,\n  ) {\n    // Base case: We're in the first part of the URL (thus we start with the root '/')\n    if (!req._reconstructedRoute) {\n      req._reconstructedRoute = '';\n    }\n\n    // If the layer's partial route has params, is a regex or an array, the route is stored in layer.route.\n    const { layerRoutePath, isRegex, isArray, numExtraSegments }: LayerRoutePathInfo = getLayerRoutePathInfo(layer);\n\n    if (layerRoutePath || isRegex || isArray) {\n      req._hasParameters = true;\n    }\n\n    // Otherwise, the hardcoded path (i.e. a partial route without params) is stored in layer.path\n    const partialRoute = layerRoutePath || layer.path || '';\n\n    // Normalize the partial route so that it doesn't contain leading or trailing slashes\n    // and exclude empty or '*' wildcard routes.\n    // The exclusion of '*' routes is our best effort to not \"pollute\" the transaction name\n    // with interim handlers (e.g. ones that check authentication or do other middleware stuff).\n    // We want to end up with the parameterized URL of the incoming request without any extraneous path segments.\n    const finalPartialRoute = partialRoute\n      .split('/')\n      .filter(segment => segment.length > 0 && (isRegex || isArray || !segment.includes('*')))\n      .join('/');\n\n    // If we found a valid partial URL, we append it to the reconstructed route\n    if (finalPartialRoute && finalPartialRoute.length > 0) {\n      // If the partial route is from a regex route, we append a '/' to close the regex\n      req._reconstructedRoute += `/${finalPartialRoute}${isRegex ? '/' : ''}`;\n    }\n\n    // Now we check if we are in the \"last\" part of the route. We determine this by comparing the\n    // number of URL segments from the original URL to that of our reconstructed parameterized URL.\n    // If we've reached our final destination, we update the transaction name.\n    const urlLength = getNumberOfUrlSegments(req.originalUrl || '') + numExtraSegments;\n    const routeLength = getNumberOfUrlSegments(req._reconstructedRoute);\n\n    if (urlLength === routeLength) {\n      if (!req._hasParameters) {\n        if (req._reconstructedRoute !== req.originalUrl) {\n          req._reconstructedRoute = req.originalUrl ? stripUrlQueryAndFragment(req.originalUrl) : req.originalUrl;\n        }\n      }\n\n      const transaction = res.__sentry_transaction;\n      if (transaction && transaction.metadata.source !== 'custom') {\n        // If the request URL is '/' or empty, the reconstructed route will be empty.\n        // Therefore, we fall back to setting the final route to '/' in this case.\n        const finalRoute = req._reconstructedRoute || '/';\n\n        transaction.setName(...extractPathForTransaction(req, { path: true, method: true, customRoute: finalRoute }));\n      }\n    }\n\n    return originalProcessParams.call(this, layer, called, req, res, done);\n  };\n}\n\ntype LayerRoutePathInfo = {\n  layerRoutePath?: string;\n  isRegex: boolean;\n  isArray: boolean;\n  numExtraSegments: number;\n};\n\n/**\n * Extracts and stringifies the layer's route which can either be a string with parameters (`users/:id`),\n * a RegEx (`/test/`) or an array of strings and regexes (`['/path1', /\\/path[2-5]/, /path/:id]`). Additionally\n * returns extra information about the route, such as if the route is defined as regex or as an array.\n *\n * @param layer the layer to extract the stringified route from\n *\n * @returns an object containing the stringified route, a flag determining if the route was a regex\n *          and the number of extra segments to the matched path that are additionally in the route,\n *          if the route was an array (defaults to 0).\n */\nfunction getLayerRoutePathInfo(layer: Layer): LayerRoutePathInfo {\n  const lrp = layer.route?.path;\n\n  const isRegex = isRegExp(lrp);\n  const isArray = Array.isArray(lrp);\n\n  if (!lrp) {\n    return { isRegex, isArray, numExtraSegments: 0 };\n  }\n\n  const numExtraSegments = isArray\n    ? Math.max(getNumberOfArrayUrlSegments(lrp as RouteType[]) - getNumberOfUrlSegments(layer.path || ''), 0)\n    : 0;\n\n  const layerRoutePath = getLayerRoutePathString(isArray, lrp);\n\n  return { layerRoutePath, isRegex, isArray, numExtraSegments };\n}\n\n/**\n * Returns the number of URL segments in an array of routes\n *\n * Example: ['/api/test', /\\/api\\/post[0-9]/, '/users/:id/details`] -> 7\n */\nfunction getNumberOfArrayUrlSegments(routesArray: RouteType[]): number {\n  return routesArray.reduce((accNumSegments: number, currentRoute: RouteType) => {\n    // array members can be a RegEx -> convert them toString\n    return accNumSegments + getNumberOfUrlSegments(currentRoute.toString());\n  }, 0);\n}\n\n/**\n * Extracts and returns the stringified version of the layers route path\n * Handles route arrays (by joining the paths together) as well as RegExp and normal\n * string values (in the latter case the toString conversion is technically unnecessary but\n * it doesn't hurt us either).\n */\nfunction getLayerRoutePathString(isArray: boolean, lrp?: RouteType | RouteType[]): string | undefined {\n  if (isArray) {\n    return (lrp as RouteType[]).map(r => r.toString()).join(',');\n  }\n  return lrp && lrp.toString();\n}\n", "import type { Hub } from '@sentry/core';\nimport type { EventProcessor } from '@sentry/types';\nimport { fill, isThenable, loadModule, logger } from '@sentry/utils';\n\nimport type { LazyLoadedIntegration } from './lazy';\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\ninterface PgClient {\n  prototype: {\n    query: () => void | Promise<unknown>;\n  };\n}\n\ninterface PgClientThis {\n  database?: string;\n  host?: string;\n  port?: number;\n  user?: string;\n}\n\ninterface PgOptions {\n  usePgNative?: boolean;\n}\n\ntype PGModule = { Client: PgClient; native: { Client: PgClient } };\n\n/** Tracing integration for node-postgres package */\nexport class Postgres implements LazyLoadedIntegration<PGModule> {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Postgres';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private _usePgNative: boolean;\n\n  private _module?: PGModule;\n\n  public constructor(options: PgOptions = {}) {\n    this.name = Postgres.id;\n    this._usePgNative = !!options.usePgNative;\n  }\n\n  /** @inheritdoc */\n  public loadDependency(): PGModule | undefined {\n    return (this._module = this._module || loadModule('pg'));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n      __DEBUG_BUILD__ && logger.log('Postgres Integration is skipped because of instrumenter configuration.');\n      return;\n    }\n\n    const pkg = this.loadDependency();\n\n    if (!pkg) {\n      __DEBUG_BUILD__ && logger.error('Postgres Integration was unable to require `pg` package.');\n      return;\n    }\n\n    if (this._usePgNative && !pkg.native?.Client) {\n      __DEBUG_BUILD__ && logger.error(\"Postgres Integration was unable to access 'pg-native' bindings.\");\n      return;\n    }\n\n    const { Client } = this._usePgNative ? pkg.native : pkg;\n\n    /**\n     * function (query, callback) => void\n     * function (query, params, callback) => void\n     * function (query) => Promise\n     * function (query, params) => Promise\n     * function (pg.Cursor) => pg.Cursor\n     */\n    fill(Client.prototype, 'query', function (orig: () => void | Promise<unknown>) {\n      return function (this: PgClientThis, config: unknown, values: unknown, callback: unknown) {\n        const scope = getCurrentHub().getScope();\n        const parentSpan = scope.getSpan();\n\n        const data: Record<string, string | number> = {\n          'db.system': 'postgresql',\n        };\n\n        try {\n          if (this.database) {\n            data['db.name'] = this.database;\n          }\n          if (this.host) {\n            data['server.address'] = this.host;\n          }\n          if (this.port) {\n            data['server.port'] = this.port;\n          }\n          if (this.user) {\n            data['db.user'] = this.user;\n          }\n        } catch (e) {\n          // ignore\n        }\n\n        const span = parentSpan?.startChild({\n          description: typeof config === 'string' ? config : (config as { text: string }).text,\n          op: 'db',\n          origin: 'auto.db.postgres',\n          data,\n        });\n\n        if (typeof callback === 'function') {\n          return orig.call(this, config, values, function (err: Error, result: unknown) {\n            span?.finish();\n            callback(err, result);\n          });\n        }\n\n        if (typeof values === 'function') {\n          return orig.call(this, config, function (err: Error, result: unknown) {\n            span?.finish();\n            values(err, result);\n          });\n        }\n\n        const rv = typeof values !== 'undefined' ? orig.call(this, config, values) : orig.call(this, config);\n\n        if (isThenable(rv)) {\n          return rv.then((res: unknown) => {\n            span?.finish();\n            return res;\n          });\n        }\n\n        span?.finish();\n        return rv;\n      };\n    });\n  }\n}\n", "import type { Hub } from '@sentry/core';\nimport type { EventProcessor, Span } from '@sentry/types';\nimport { fill, loadModule, logger } from '@sentry/utils';\n\nimport type { LazyLoadedIntegration } from './lazy';\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\ninterface MysqlConnection {\n  prototype: {\n    connect: () => void;\n  };\n  createQuery: () => void;\n}\n\ninterface MysqlConnectionConfig {\n  host: string;\n  port: number;\n  user: string;\n}\n\n/** Tracing integration for node-mysql package */\nexport class Mysql implements LazyLoadedIntegration<MysqlConnection> {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Mysql';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private _module?: MysqlConnection;\n\n  public constructor() {\n    this.name = Mysql.id;\n  }\n\n  /** @inheritdoc */\n  public loadDependency(): MysqlConnection | undefined {\n    return (this._module = this._module || loadModule('mysql/lib/Connection.js'));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n      __DEBUG_BUILD__ && logger.log('Mysql Integration is skipped because of instrumenter configuration.');\n      return;\n    }\n\n    const pkg = this.loadDependency();\n\n    if (!pkg) {\n      __DEBUG_BUILD__ && logger.error('Mysql Integration was unable to require `mysql` package.');\n      return;\n    }\n\n    let mySqlConfig: MysqlConnectionConfig | undefined = undefined;\n\n    try {\n      pkg.prototype.connect = new Proxy(pkg.prototype.connect, {\n        apply(wrappingTarget, thisArg: { config: MysqlConnectionConfig }, args) {\n          if (!mySqlConfig) {\n            mySqlConfig = thisArg.config;\n          }\n          return wrappingTarget.apply(thisArg, args);\n        },\n      });\n    } catch (e) {\n      __DEBUG_BUILD__ && logger.error('Mysql Integration was unable to instrument `mysql` config.');\n    }\n\n    function spanDataFromConfig(): Record<string, unknown> {\n      if (!mySqlConfig) {\n        return {};\n      }\n      return {\n        'server.address': mySqlConfig.host,\n        'server.port': mySqlConfig.port,\n        'db.user': mySqlConfig.user,\n      };\n    }\n\n    function finishSpan(span: Span | undefined): void {\n      if (!span) {\n        return;\n      }\n\n      const data = spanDataFromConfig();\n      Object.keys(data).forEach(key => {\n        span.setData(key, data[key]);\n      });\n\n      span.finish();\n    }\n\n    // The original function will have one of these signatures:\n    //    function (callback) => void\n    //    function (options, callback) => void\n    //    function (options, values, callback) => void\n    fill(pkg, 'createQuery', function (orig: () => void) {\n      return function (this: unknown, options: unknown, values: unknown, callback: unknown) {\n        const scope = getCurrentHub().getScope();\n        const parentSpan = scope.getSpan();\n\n        const span = parentSpan?.startChild({\n          description: typeof options === 'string' ? options : (options as { sql: string }).sql,\n          op: 'db',\n          origin: 'auto.db.mysql',\n          data: {\n            'db.system': 'mysql',\n          },\n        });\n\n        if (typeof callback === 'function') {\n          return orig.call(this, options, values, function (err: Error, result: unknown, fields: unknown) {\n            finishSpan(span);\n            callback(err, result, fields);\n          });\n        }\n\n        if (typeof values === 'function') {\n          return orig.call(this, options, function (err: Error, result: unknown, fields: unknown) {\n            finishSpan(span);\n            values(err, result, fields);\n          });\n        }\n\n        return orig.call(this, options, values, function () {\n          finishSpan(span);\n        });\n      };\n    });\n  }\n}\n", "import type { Hub } from '@sentry/core';\nimport type { EventProcessor, SpanContext } from '@sentry/types';\nimport { fill, isThenable, loadModule, logger } from '@sentry/utils';\n\nimport type { LazyLoadedIntegration } from './lazy';\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\n// This allows us to use the same array for both defaults options and the type itself.\n// (note `as const` at the end to make it a union of string literal types (i.e. \"a\" | \"b\" | ... )\n// and not just a string[])\ntype Operation = (typeof OPERATIONS)[number];\nconst OPERATIONS = [\n  'aggregate', // aggregate(pipeline, options, callback)\n  'bulkWrite', // bulkWrite(operations, options, callback)\n  'countDocuments', // countDocuments(query, options, callback)\n  'createIndex', // createIndex(fieldOrSpec, options, callback)\n  'createIndexes', // createIndexes(indexSpecs, options, callback)\n  'deleteMany', // deleteMany(filter, options, callback)\n  'deleteOne', // deleteOne(filter, options, callback)\n  'distinct', // distinct(key, query, options, callback)\n  'drop', // drop(options, callback)\n  'dropIndex', // dropIndex(indexName, options, callback)\n  'dropIndexes', // dropIndexes(options, callback)\n  'estimatedDocumentCount', // estimatedDocumentCount(options, callback)\n  'find', // find(query, options, callback)\n  'findOne', // findOne(query, options, callback)\n  'findOneAndDelete', // findOneAndDelete(filter, options, callback)\n  'findOneAndReplace', // findOneAndReplace(filter, replacement, options, callback)\n  'findOneAndUpdate', // findOneAndUpdate(filter, update, options, callback)\n  'indexes', // indexes(options, callback)\n  'indexExists', // indexExists(indexes, options, callback)\n  'indexInformation', // indexInformation(options, callback)\n  'initializeOrderedBulkOp', // initializeOrderedBulkOp(options, callback)\n  'insertMany', // insertMany(docs, options, callback)\n  'insertOne', // insertOne(doc, options, callback)\n  'isCapped', // isCapped(options, callback)\n  'mapReduce', // mapReduce(map, reduce, options, callback)\n  'options', // options(options, callback)\n  'parallelCollectionScan', // parallelCollectionScan(options, callback)\n  'rename', // rename(newName, options, callback)\n  'replaceOne', // replaceOne(filter, doc, options, callback)\n  'stats', // stats(options, callback)\n  'updateMany', // updateMany(filter, update, options, callback)\n  'updateOne', // updateOne(filter, update, options, callback)\n] as const;\n\n// All of the operations above take `options` and `callback` as their final parameters, but some of them\n// take additional parameters as well. For those operations, this is a map of\n// { <operation name>:  [<names of additional parameters>] }, as a way to know what to call the operation's\n// positional arguments when we add them to the span's `data` object later\nconst OPERATION_SIGNATURES: {\n  [op in Operation]?: string[];\n} = {\n  // aggregate intentionally not included because `pipeline` arguments are too complex to serialize well\n  // see https://github.com/getsentry/sentry-javascript/pull/3102\n  bulkWrite: ['operations'],\n  countDocuments: ['query'],\n  createIndex: ['fieldOrSpec'],\n  createIndexes: ['indexSpecs'],\n  deleteMany: ['filter'],\n  deleteOne: ['filter'],\n  distinct: ['key', 'query'],\n  dropIndex: ['indexName'],\n  find: ['query'],\n  findOne: ['query'],\n  findOneAndDelete: ['filter'],\n  findOneAndReplace: ['filter', 'replacement'],\n  findOneAndUpdate: ['filter', 'update'],\n  indexExists: ['indexes'],\n  insertMany: ['docs'],\n  insertOne: ['doc'],\n  mapReduce: ['map', 'reduce'],\n  rename: ['newName'],\n  replaceOne: ['filter', 'doc'],\n  updateMany: ['filter', 'update'],\n  updateOne: ['filter', 'update'],\n};\n\ninterface MongoCollection {\n  collectionName: string;\n  dbName: string;\n  namespace: string;\n  prototype: {\n    [operation in Operation]: (...args: unknown[]) => unknown;\n  };\n}\n\ninterface MongoOptions {\n  operations?: Operation[];\n  describeOperations?: boolean | Operation[];\n  useMongoose?: boolean;\n}\n\ninterface MongoCursor {\n  once(event: 'close', listener: () => void): void;\n}\n\nfunction isCursor(maybeCursor: MongoCursor): maybeCursor is MongoCursor {\n  return maybeCursor && typeof maybeCursor === 'object' && maybeCursor.once && typeof maybeCursor.once === 'function';\n}\n\ntype MongoModule = { Collection: MongoCollection };\n\n/** Tracing integration for mongo package */\nexport class Mongo implements LazyLoadedIntegration<MongoModule> {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Mongo';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private _operations: Operation[];\n  private _describeOperations?: boolean | Operation[];\n  private _useMongoose: boolean;\n\n  private _module?: MongoModule;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: MongoOptions = {}) {\n    this.name = Mongo.id;\n    this._operations = Array.isArray(options.operations) ? options.operations : (OPERATIONS as unknown as Operation[]);\n    this._describeOperations = 'describeOperations' in options ? options.describeOperations : true;\n    this._useMongoose = !!options.useMongoose;\n  }\n\n  /** @inheritdoc */\n  public loadDependency(): MongoModule | undefined {\n    const moduleName = this._useMongoose ? 'mongoose' : 'mongodb';\n    return (this._module = this._module || loadModule(moduleName));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n      __DEBUG_BUILD__ && logger.log('Mongo Integration is skipped because of instrumenter configuration.');\n      return;\n    }\n\n    const pkg = this.loadDependency();\n\n    if (!pkg) {\n      const moduleName = this._useMongoose ? 'mongoose' : 'mongodb';\n      __DEBUG_BUILD__ && logger.error(`Mongo Integration was unable to require \\`${moduleName}\\` package.`);\n      return;\n    }\n\n    this._instrumentOperations(pkg.Collection, this._operations, getCurrentHub);\n  }\n\n  /**\n   * Patches original collection methods\n   */\n  private _instrumentOperations(collection: MongoCollection, operations: Operation[], getCurrentHub: () => Hub): void {\n    operations.forEach((operation: Operation) => this._patchOperation(collection, operation, getCurrentHub));\n  }\n\n  /**\n   * Patches original collection to utilize our tracing functionality\n   */\n  private _patchOperation(collection: MongoCollection, operation: Operation, getCurrentHub: () => Hub): void {\n    if (!(operation in collection.prototype)) return;\n\n    const getSpanContext = this._getSpanContextFromOperationArguments.bind(this);\n\n    fill(collection.prototype, operation, function (orig: () => void | Promise<unknown>) {\n      return function (this: unknown, ...args: unknown[]) {\n        const lastArg = args[args.length - 1];\n        const scope = getCurrentHub().getScope();\n        const parentSpan = scope.getSpan();\n\n        // Check if the operation was passed a callback. (mapReduce requires a different check, as\n        // its (non-callback) arguments can also be functions.)\n        if (typeof lastArg !== 'function' || (operation === 'mapReduce' && args.length === 2)) {\n          const span = parentSpan?.startChild(getSpanContext(this, operation, args));\n          const maybePromiseOrCursor = orig.call(this, ...args);\n\n          if (isThenable(maybePromiseOrCursor)) {\n            return maybePromiseOrCursor.then((res: unknown) => {\n              span?.finish();\n              return res;\n            });\n          }\n          // If the operation returns a Cursor\n          // we need to attach a listener to it to finish the span when the cursor is closed.\n          else if (isCursor(maybePromiseOrCursor)) {\n            const cursor = maybePromiseOrCursor as MongoCursor;\n\n            try {\n              cursor.once('close', () => {\n                span?.finish();\n              });\n            } catch (e) {\n              // If the cursor is already closed, `once` will throw an error. In that case, we can\n              // finish the span immediately.\n              span?.finish();\n            }\n\n            return cursor;\n          } else {\n            span?.finish();\n            return maybePromiseOrCursor;\n          }\n        }\n\n        const span = parentSpan?.startChild(getSpanContext(this, operation, args.slice(0, -1)));\n\n        return orig.call(this, ...args.slice(0, -1), function (err: Error, result: unknown) {\n          span?.finish();\n          lastArg(err, result);\n        });\n      };\n    });\n  }\n\n  /**\n   * Form a SpanContext based on the user input to a given operation.\n   */\n  private _getSpanContextFromOperationArguments(\n    collection: MongoCollection,\n    operation: Operation,\n    args: unknown[],\n  ): SpanContext {\n    const data: { [key: string]: string } = {\n      'db.system': 'mongodb',\n      'db.name': collection.dbName,\n      'db.operation': operation,\n      'db.mongodb.collection': collection.collectionName,\n    };\n    const spanContext: SpanContext = {\n      op: 'db',\n      // TODO v8: Use `${collection.collectionName}.${operation}`\n      origin: 'auto.db.mongo',\n      description: operation,\n      data,\n    };\n\n    // If the operation takes no arguments besides `options` and `callback`, or if argument\n    // collection is disabled for this operation, just return early.\n    const signature = OPERATION_SIGNATURES[operation];\n    const shouldDescribe = Array.isArray(this._describeOperations)\n      ? this._describeOperations.includes(operation)\n      : this._describeOperations;\n\n    if (!signature || !shouldDescribe) {\n      return spanContext;\n    }\n\n    try {\n      // Special case for `mapReduce`, as the only one accepting functions as arguments.\n      if (operation === 'mapReduce') {\n        const [map, reduce] = args as { name?: string }[];\n        data[signature[0]] = typeof map === 'string' ? map : map.name || '<anonymous>';\n        data[signature[1]] = typeof reduce === 'string' ? reduce : reduce.name || '<anonymous>';\n      } else {\n        for (let i = 0; i < signature.length; i++) {\n          data[`db.mongodb.${signature[i]}`] = JSON.stringify(args[i]);\n        }\n      }\n    } catch (_oO) {\n      // no-empty\n    }\n\n    return spanContext;\n  }\n}\n", "import { getCurrentHub, trace } from '@sentry/core';\nimport type { Integration } from '@sentry/types';\nimport { addNonEnumerableProperty, logger } from '@sentry/utils';\n\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\ntype PrismaAction =\n  | 'findUnique'\n  | 'findMany'\n  | 'findFirst'\n  | 'create'\n  | 'createMany'\n  | 'update'\n  | 'updateMany'\n  | 'upsert'\n  | 'delete'\n  | 'deleteMany'\n  | 'executeRaw'\n  | 'queryRaw'\n  | 'aggregate'\n  | 'count'\n  | 'runCommandRaw';\n\ninterface PrismaMiddlewareParams {\n  model?: unknown;\n  action: PrismaAction;\n  args: unknown;\n  dataPath: string[];\n  runInTransaction: boolean;\n}\n\ntype PrismaMiddleware<T = unknown> = (\n  params: PrismaMiddlewareParams,\n  next: (params: PrismaMiddlewareParams) => Promise<T>,\n) => Promise<T>;\n\ninterface PrismaClient {\n  _sentryInstrumented?: boolean;\n  _engineConfig?: {\n    activeProvider?: string;\n    clientVersion?: string;\n  };\n  $use: (cb: PrismaMiddleware) => void;\n}\n\nfunction isValidPrismaClient(possibleClient: unknown): possibleClient is PrismaClient {\n  return !!possibleClient && !!(possibleClient as PrismaClient)['$use'];\n}\n\n/** Tracing integration for @prisma/client package */\nexport class Prisma implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Prisma';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { client?: unknown } = {}) {\n    this.name = Prisma.id;\n\n    // We instrument the PrismaClient inside the constructor and not inside `setupOnce` because in some cases of server-side\n    // bundling (Next.js) multiple Prisma clients can be instantiated, even though users don't intend to. When instrumenting\n    // in setupOnce we can only ever instrument one client.\n    // https://github.com/getsentry/sentry-javascript/issues/7216#issuecomment-1602375012\n    // In the future we might explore providing a dedicated PrismaClient middleware instead of this hack.\n    if (isValidPrismaClient(options.client) && !options.client._sentryInstrumented) {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      addNonEnumerableProperty(options.client as any, '_sentryInstrumented', true);\n\n      const clientData: Record<string, string | number> = {};\n      try {\n        const engineConfig = (options.client as PrismaClient)._engineConfig;\n        if (engineConfig) {\n          const { activeProvider, clientVersion } = engineConfig;\n          if (activeProvider) {\n            clientData['db.system'] = activeProvider;\n          }\n          if (clientVersion) {\n            clientData['db.prisma.version'] = clientVersion;\n          }\n        }\n      } catch (e) {\n        // ignore\n      }\n\n      options.client.$use((params, next: (params: PrismaMiddlewareParams) => Promise<unknown>) => {\n        if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n          return next(params);\n        }\n\n        const action = params.action;\n        const model = params.model;\n\n        return trace(\n          {\n            name: model ? `${model} ${action}` : action,\n            op: 'db.sql.prisma',\n            origin: 'auto.db.prisma',\n            data: { ...clientData, 'db.operation': action },\n          },\n          () => next(params),\n        );\n      });\n    } else {\n      __DEBUG_BUILD__ &&\n        logger.warn('Unsupported Prisma client provided to PrismaIntegration. Provided client:', options.client);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    // Noop - here for backwards compatibility\n  }\n}\n", "import type { Hub } from '@sentry/core';\nimport type { EventProcessor } from '@sentry/types';\nimport { fill, isThenable, loadModule, logger } from '@sentry/utils';\n\nimport type { LazyLoadedIntegration } from './lazy';\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\ntype GraphQLModule = {\n  [method: string]: (...args: unknown[]) => unknown;\n};\n\n/** Tracing integration for graphql package */\nexport class GraphQL implements LazyLoadedIntegration<GraphQLModule> {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'GraphQL';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private _module?: GraphQLModule;\n\n  public constructor() {\n    this.name = GraphQL.id;\n  }\n\n  /** @inheritdoc */\n  public loadDependency(): GraphQLModule | undefined {\n    return (this._module = this._module || loadModule('graphql/execution/execute.js'));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n      __DEBUG_BUILD__ && logger.log('GraphQL Integration is skipped because of instrumenter configuration.');\n      return;\n    }\n\n    const pkg = this.loadDependency();\n\n    if (!pkg) {\n      __DEBUG_BUILD__ && logger.error('GraphQL Integration was unable to require graphql/execution package.');\n      return;\n    }\n\n    fill(pkg, 'execute', function (orig: () => void | Promise<unknown>) {\n      return function (this: unknown, ...args: unknown[]) {\n        const scope = getCurrentHub().getScope();\n        const parentSpan = scope.getSpan();\n\n        const span = parentSpan?.startChild({\n          description: 'execute',\n          op: 'graphql.execute',\n          origin: 'auto.graphql.graphql',\n        });\n\n        scope?.setSpan(span);\n\n        const rv = orig.call(this, ...args);\n\n        if (isThenable(rv)) {\n          return rv.then((res: unknown) => {\n            span?.finish();\n            scope?.setSpan(parentSpan);\n\n            return res;\n          });\n        }\n\n        span?.finish();\n        scope?.setSpan(parentSpan);\n        return rv;\n      };\n    });\n  }\n}\n", "import type { Hub } from '@sentry/core';\nimport type { EventProcessor } from '@sentry/types';\nimport { arrayify, fill, isThenable, loadModule, logger } from '@sentry/utils';\n\nimport type { LazyLoadedIntegration } from './lazy';\nimport { shouldDisableAutoInstrumentation } from './utils/node-utils';\n\ninterface ApolloOptions {\n  useNestjs?: boolean;\n}\n\ntype ApolloResolverGroup = {\n  [key: string]: () => unknown;\n};\n\ntype ApolloModelResolvers = {\n  [key: string]: ApolloResolverGroup;\n};\n\ntype GraphQLModule = {\n  GraphQLFactory: {\n    prototype: {\n      create: (resolvers: ApolloModelResolvers[]) => unknown;\n    };\n  };\n};\n\ntype ApolloModule = {\n  ApolloServerBase: {\n    prototype: {\n      constructSchema: (config: unknown) => unknown;\n    };\n  };\n};\n\n/** Tracing integration for Apollo */\nexport class Apollo implements LazyLoadedIntegration<GraphQLModule & ApolloModule> {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Apollo';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private readonly _useNest: boolean;\n\n  private _module?: GraphQLModule & ApolloModule;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(\n    options: ApolloOptions = {\n      useNestjs: false,\n    },\n  ) {\n    this.name = Apollo.id;\n    this._useNest = !!options.useNestjs;\n  }\n\n  /** @inheritdoc */\n  public loadDependency(): (GraphQLModule & ApolloModule) | undefined {\n    if (this._useNest) {\n      this._module = this._module || loadModule('@nestjs/graphql');\n    } else {\n      this._module = this._module || loadModule('apollo-server-core');\n    }\n\n    return this._module;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    if (shouldDisableAutoInstrumentation(getCurrentHub)) {\n      __DEBUG_BUILD__ && logger.log('Apollo Integration is skipped because of instrumenter configuration.');\n      return;\n    }\n\n    if (this._useNest) {\n      const pkg = this.loadDependency();\n\n      if (!pkg) {\n        __DEBUG_BUILD__ && logger.error('Apollo-NestJS Integration was unable to require @nestjs/graphql package.');\n        return;\n      }\n\n      /**\n       * Iterate over resolvers of NestJS ResolversExplorerService before schemas are constructed.\n       */\n      fill(\n        pkg.GraphQLFactory.prototype,\n        'mergeWithSchema',\n        function (orig: (this: unknown, ...args: unknown[]) => unknown) {\n          return function (\n            this: { resolversExplorerService: { explore: () => ApolloModelResolvers[] } },\n            ...args: unknown[]\n          ) {\n            fill(this.resolversExplorerService, 'explore', function (orig: () => ApolloModelResolvers[]) {\n              return function (this: unknown) {\n                const resolvers = arrayify(orig.call(this));\n\n                const instrumentedResolvers = instrumentResolvers(resolvers, getCurrentHub);\n\n                return instrumentedResolvers;\n              };\n            });\n\n            return orig.call(this, ...args);\n          };\n        },\n      );\n    } else {\n      const pkg = this.loadDependency();\n\n      if (!pkg) {\n        __DEBUG_BUILD__ && logger.error('Apollo Integration was unable to require apollo-server-core package.');\n        return;\n      }\n\n      /**\n       * Iterate over resolvers of the ApolloServer instance before schemas are constructed.\n       */\n      fill(pkg.ApolloServerBase.prototype, 'constructSchema', function (orig: (config: unknown) => unknown) {\n        return function (this: {\n          config: { resolvers?: ApolloModelResolvers[]; schema?: unknown; modules?: unknown };\n        }) {\n          if (!this.config.resolvers) {\n            if (__DEBUG_BUILD__) {\n              if (this.config.schema) {\n                logger.warn(\n                  'Apollo integration is not able to trace `ApolloServer` instances constructed via `schema` property.' +\n                    'If you are using NestJS with Apollo, please use `Sentry.Integrations.Apollo({ useNestjs: true })` instead.',\n                );\n                logger.warn();\n              } else if (this.config.modules) {\n                logger.warn(\n                  'Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property.',\n                );\n              }\n\n              logger.error('Skipping tracing as no resolvers found on the `ApolloServer` instance.');\n            }\n\n            return orig.call(this);\n          }\n\n          const resolvers = arrayify(this.config.resolvers);\n\n          this.config.resolvers = instrumentResolvers(resolvers, getCurrentHub);\n\n          return orig.call(this);\n        };\n      });\n    }\n  }\n}\n\nfunction instrumentResolvers(resolvers: ApolloModelResolvers[], getCurrentHub: () => Hub): ApolloModelResolvers[] {\n  return resolvers.map(model => {\n    Object.keys(model).forEach(resolverGroupName => {\n      Object.keys(model[resolverGroupName]).forEach(resolverName => {\n        if (typeof model[resolverGroupName][resolverName] !== 'function') {\n          return;\n        }\n\n        wrapResolver(model, resolverGroupName, resolverName, getCurrentHub);\n      });\n    });\n\n    return model;\n  });\n}\n\n/**\n * Wrap a single resolver which can be a parent of other resolvers and/or db operations.\n */\nfunction wrapResolver(\n  model: ApolloModelResolvers,\n  resolverGroupName: string,\n  resolverName: string,\n  getCurrentHub: () => Hub,\n): void {\n  fill(model[resolverGroupName], resolverName, function (orig: () => unknown | Promise<unknown>) {\n    return function (this: unknown, ...args: unknown[]) {\n      const scope = getCurrentHub().getScope();\n      const parentSpan = scope.getSpan();\n      const span = parentSpan?.startChild({\n        description: `${resolverGroupName}.${resolverName}`,\n        op: 'graphql.resolve',\n        origin: 'auto.graphql.apollo',\n      });\n\n      const rv = orig.call(this, ...args);\n\n      if (isThenable(rv)) {\n        return rv.then((res: unknown) => {\n          span?.finish();\n          return res;\n        });\n      }\n\n      span?.finish();\n\n      return rv;\n    };\n  });\n}\n", "import type { Integration, IntegrationClass } from '@sentry/types';\nimport { dynamicRequire } from '@sentry/utils';\n\nexport interface LazyLoadedIntegration<T = object> extends Integration {\n  /**\n   * Loads the integration's dependency and caches it so it doesn't have to be loaded again.\n   *\n   * If this returns undefined, the dependency could not be loaded.\n   */\n  loadDependency(): T | undefined;\n}\n\nexport const lazyLoadedNodePerformanceMonitoringIntegrations: (() => LazyLoadedIntegration)[] = [\n  () => {\n    const integration = dynamicRequire(module, './apollo') as {\n      Apollo: IntegrationClass<LazyLoadedIntegration>;\n    };\n    return new integration.Apollo();\n  },\n  () => {\n    const integration = dynamicRequire(module, './apollo') as {\n      Apollo: IntegrationClass<LazyLoadedIntegration>;\n    };\n    return new integration.Apollo({ useNestjs: true });\n  },\n  () => {\n    const integration = dynamicRequire(module, './graphql') as {\n      GraphQL: IntegrationClass<LazyLoadedIntegration>;\n    };\n    return new integration.GraphQL();\n  },\n  () => {\n    const integration = dynamicRequire(module, './mongo') as {\n      Mongo: IntegrationClass<LazyLoadedIntegration>;\n    };\n    return new integration.Mongo();\n  },\n  () => {\n    const integration = dynamicRequire(module, './mongo') as {\n      Mongo: IntegrationClass<LazyLoadedIntegration>;\n    };\n    return new integration.Mongo({ mongoose: true });\n  },\n  () => {\n    const integration = dynamicRequire(module, './mysql') as {\n      Mysql: IntegrationClass<LazyLoadedIntegration>;\n    };\n    return new integration.Mysql();\n  },\n  () => {\n    const integration = dynamicRequire(module, './postgres') as {\n      Postgres: IntegrationClass<LazyLoadedIntegration>;\n    };\n    return new integration.Postgres();\n  },\n];\n", "import { GLOBAL_OBJ } from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n", "import type { IdleTransaction, SpanStatusType } from '@sentry/core';\nimport { getActiveTransaction } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { WINDOW } from './types';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n  if (WINDOW && WINDOW.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      const activeTransaction = getActiveTransaction() as IdleTransaction;\n      if (WINDOW.document.hidden && activeTransaction) {\n        const statusType: SpanStatusType = 'cancelled';\n\n        __DEBUG_BUILD__ &&\n          logger.log(\n            `[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${activeTransaction.op}`,\n          );\n        // We should not set status if it is already set, this prevent important statuses like\n        // error or data loss from being overwritten on transaction.\n        if (!activeTransaction.status) {\n          activeTransaction.setStatus(statusType);\n        }\n        activeTransaction.setTag('visibilitychange', 'document.hidden');\n        activeTransaction.finish();\n      }\n    });\n  } else {\n    __DEBUG_BUILD__ &&\n      logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric, ReportCallback } from '../types';\n\nexport const bindReporter = (\n  callback: ReportCallback,\n  metric: Metric,\n  reportAllChanges?: boolean,\n): ((forceReport?: boolean) => void) => {\n  let prevValue: number;\n  let delta: number;\n  return (forceReport?: boolean) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue || 0);\n\n        // Report the metric if there's a non-zero delta or if no previous\n        // value exists (which can happen in the case of the document becoming\n        // hidden when the metric value is 0).\n        // See: https://github.com/GoogleChrome/web-vitals/issues/14\n        if (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = (): string => {\n  return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { NavigationTimingPolyfillEntry } from '../types';\n\nconst getNavigationEntryFromPerformanceTiming = (): NavigationTimingPolyfillEntry => {\n  // eslint-disable-next-line deprecation/deprecation\n  const timing = WINDOW.performance.timing;\n  // eslint-disable-next-line deprecation/deprecation\n  const type = WINDOW.performance.navigation.type;\n\n  const navigationEntry: { [key: string]: number | string } = {\n    entryType: 'navigation',\n    startTime: 0,\n    type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n  };\n\n  for (const key in timing) {\n    if (key !== 'navigationStart' && key !== 'toJSON') {\n      // eslint-disable-next-line deprecation/deprecation\n      navigationEntry[key] = Math.max((timing[key as keyof PerformanceTiming] as number) - timing.navigationStart, 0);\n    }\n  }\n  return navigationEntry as unknown as NavigationTimingPolyfillEntry;\n};\n\nexport const getNavigationEntry = (): PerformanceNavigationTiming | NavigationTimingPolyfillEntry | undefined => {\n  if (WINDOW.__WEB_VITALS_POLYFILL__) {\n    return (\n      WINDOW.performance &&\n      ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n        getNavigationEntryFromPerformanceTiming())\n    );\n  } else {\n    return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n  }\n};\n", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n  const navEntry = getNavigationEntry();\n  return (navEntry && navEntry.activationStart) || 0;\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport type { Metric } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = (name: Metric['name'], value?: number): Metric => {\n  const navEntry = getNavigationEntry();\n  let navigationType: Metric['navigationType'] = 'navigate';\n\n  if (navEntry) {\n    if (WINDOW.document.prerendering || getActivationStart() > 0) {\n      navigationType = 'prerender';\n    } else {\n      navigationType = navEntry.type.replace(/_/g, '-') as Metric['navigationType'];\n    }\n  }\n\n  return {\n    name,\n    value: typeof value === 'undefined' ? -1 : value,\n    rating: 'good', // Will be updated if the value changes.\n    delta: 0,\n    entries: [],\n    id: generateUniqueID(),\n    navigationType,\n  };\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FirstInputPolyfillEntry, NavigationTimingPolyfillEntry, PerformancePaintTiming } from '../types';\n\nexport interface PerformanceEntryHandler {\n  (entry: PerformanceEntry): void;\n}\n\ninterface PerformanceEntryMap {\n  event: PerformanceEventTiming[];\n  paint: PerformancePaintTiming[];\n  'layout-shift': LayoutShift[];\n  'largest-contentful-paint': LargestContentfulPaint[];\n  'first-input': PerformanceEventTiming[] | FirstInputPolyfillEntry[];\n  navigation: PerformanceNavigationTiming[] | NavigationTimingPolyfillEntry[];\n  resource: PerformanceResourceTiming[];\n  longtask: PerformanceEntry[];\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = <K extends keyof PerformanceEntryMap>(\n  type: K,\n  callback: (entries: PerformanceEntryMap[K]) => void,\n  opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        callback(list.getEntries() as PerformanceEntryMap[K]);\n      });\n      po.observe(\n        Object.assign(\n          {\n            type,\n            buffered: true,\n          },\n          opts || {},\n        ) as PerformanceObserverInit,\n      );\n      return po;\n    }\n  } catch (e) {\n    // Do nothing.\n  }\n  return;\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\n\nexport interface OnHiddenCallback {\n  (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback, once?: boolean): void => {\n  const onHiddenOrPageHide = (event: Event): void => {\n    if (event.type === 'pagehide' || WINDOW.document.visibilityState === 'hidden') {\n      cb(event);\n      if (once) {\n        removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n        removeEventListener('pagehide', onHiddenOrPageHide, true);\n      }\n    }\n  };\n  addEventListener('visibilitychange', onHiddenOrPageHide, true);\n  // Some browsers have buggy implementations of visibilitychange,\n  // so we use pagehide in addition, just to be safe.\n  addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { CLSMetric, ReportCallback, StopListening } from './types';\n\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport: ReportCallback): StopListening | undefined => {\n  const metric = initMetric('CLS', 0);\n  let report: ReturnType<typeof bindReporter>;\n\n  let sessionValue = 0;\n  let sessionEntries: PerformanceEntry[] = [];\n\n  // const handleEntries = (entries: Metric['entries']) => {\n  const handleEntries = (entries: LayoutShift[]): void => {\n    entries.forEach(entry => {\n      // Only count layout shifts without recent user input.\n      if (!entry.hadRecentInput) {\n        const firstSessionEntry = sessionEntries[0];\n        const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n        // If the entry occurred less than 1 second after the previous entry and\n        // less than 5 seconds after the first entry in the session, include the\n        // entry in the current session. Otherwise, start a new session.\n        if (\n          sessionValue &&\n          sessionEntries.length !== 0 &&\n          entry.startTime - lastSessionEntry.startTime < 1000 &&\n          entry.startTime - firstSessionEntry.startTime < 5000\n        ) {\n          sessionValue += entry.value;\n          sessionEntries.push(entry);\n        } else {\n          sessionValue = entry.value;\n          sessionEntries = [entry];\n        }\n\n        // If the current session value is larger than the current CLS value,\n        // update CLS and the entries contributing to it.\n        if (sessionValue > metric.value) {\n          metric.value = sessionValue;\n          metric.entries = sessionEntries;\n          if (report) {\n            report();\n          }\n        }\n      }\n    });\n  };\n\n  const po = observe('layout-shift', handleEntries);\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = (): void => {\n      handleEntries(po.takeRecords() as CLSMetric['entries']);\n      report(true);\n    };\n\n    onHidden(stopListening);\n\n    return stopListening;\n  }\n\n  return;\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { onHidden } from './onHidden';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = (): number => {\n  // If the document is hidden and not prerendering, assume it was always\n  // hidden and the page was loaded in the background.\n  return WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst trackChanges = (): void => {\n  // Update the time if/when the document becomes hidden.\n  onHidden(({ timeStamp }) => {\n    firstHiddenTime = timeStamp;\n  }, true);\n};\n\nexport const getVisibilityWatcher = (): {\n  readonly firstHiddenTime: number;\n} => {\n  if (firstHiddenTime < 0) {\n    // If the document is hidden when this code runs, assume it was hidden\n    // since navigation start. This isn't a perfect heuristic, but it's the\n    // best we can do until an API is available to support querying past\n    // visibilityState.\n    firstHiddenTime = initHiddenTime();\n    trackChanges();\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n  };\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { FIDMetric, PerformanceEventTiming, ReportCallback } from './types';\n\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: ReportCallback): void => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('FID');\n  // eslint-disable-next-line prefer-const\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntry = (entry: PerformanceEventTiming): void => {\n    // Only report if the page wasn't hidden prior to the first input.\n    if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n      metric.value = entry.processingStart - entry.startTime;\n      metric.entries.push(entry);\n      report(true);\n    }\n  };\n\n  const handleEntries = (entries: FIDMetric['entries']): void => {\n    (entries as PerformanceEventTiming[]).forEach(handleEntry);\n  };\n\n  const po = observe('first-input', handleEntries);\n  report = bindReporter(onReport, metric);\n\n  if (po) {\n    onHidden(() => {\n      handleEntries(po.takeRecords() as FIDMetric['entries']);\n      po.disconnect();\n    }, true);\n  }\n};\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport type { LCPMetric, ReportCallback, StopListening } from './types';\n\nconst reportedMetricIDs: Record<string, boolean> = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nexport const onLCP = (onReport: ReportCallback): StopListening | undefined => {\n  const visibilityWatcher = getVisibilityWatcher();\n  const metric = initMetric('LCP');\n  let report: ReturnType<typeof bindReporter>;\n\n  const handleEntries = (entries: LCPMetric['entries']): void => {\n    const lastEntry = entries[entries.length - 1] as LargestContentfulPaint;\n    if (lastEntry) {\n      // The startTime attribute returns the value of the renderTime if it is\n      // not 0, and the value of the loadTime otherwise. The activationStart\n      // reference is used because LCP should be relative to page activation\n      // rather than navigation start if the page was prerendered.\n      const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n      // Only report if the page wasn't hidden prior to LCP.\n      if (value < visibilityWatcher.firstHiddenTime) {\n        metric.value = value;\n        metric.entries = [lastEntry];\n        report();\n      }\n    }\n  };\n\n  const po = observe('largest-contentful-paint', handleEntries);\n\n  if (po) {\n    report = bindReporter(onReport, metric);\n\n    const stopListening = (): void => {\n      if (!reportedMetricIDs[metric.id]) {\n        handleEntries(po.takeRecords() as LCPMetric['entries']);\n        po.disconnect();\n        reportedMetricIDs[metric.id] = true;\n        report(true);\n      }\n    };\n\n    // Stop listening after input. Note: while scrolling is an input that\n    // stop LCP observation, it's unreliable since it can be programmatically\n    // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n    ['keydown', 'click'].forEach(type => {\n      addEventListener(type, stopListening, { once: true, capture: true });\n    });\n\n    onHidden(stopListening, true);\n\n    return stopListening;\n  }\n\n  return;\n};\n", "import type { Transaction } from '@sentry/core';\nimport type { Span, SpanContext } from '@sentry/types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n  return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nexport function _startChild(transaction: Transaction, { startTimestamp, ...ctx }: SpanContext): Span {\n  if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n    transaction.startTimestamp = startTimestamp;\n  }\n\n  return transaction.startChild({\n    startTimestamp,\n    ...ctx,\n  });\n}\n", "/* eslint-disable max-lines */\nimport type { IdleTransaction, Transaction } from '@sentry/core';\nimport { getActiveTransaction } from '@sentry/core';\nimport type { Measurements } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, htmlTreeAsString, logger } from '@sentry/utils';\n\nimport { WINDOW } from '../types';\nimport { onCLS } from '../web-vitals/getCLS';\nimport { onFID } from '../web-vitals/getFID';\nimport { onLCP } from '../web-vitals/getLCP';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher';\nimport { observe } from '../web-vitals/lib/observe';\nimport type { NavigatorDeviceMemory, NavigatorNetworkInformation } from '../web-vitals/types';\nimport { _startChild, isMeasurementValue } from './utils';\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time: number): number {\n  return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI(): Performance | undefined {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\n/**\n * Start tracking web vitals\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals(): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      WINDOW.performance.mark('sentry-tracing-init');\n    }\n    _trackFID();\n    const clsCallback = _trackCLS();\n    const lcpCallback = _trackLCP();\n\n    return (): void => {\n      if (clsCallback) {\n        clsCallback();\n      }\n      if (lcpCallback) {\n        lcpCallback();\n      }\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n  const entryHandler = (entries: PerformanceEntry[]): void => {\n    for (const entry of entries) {\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n      const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      transaction.startChild({\n        description: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: startTime,\n        endTimestamp: startTime + duration,\n      });\n    }\n  };\n\n  observe('longtask', entryHandler);\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n  const entryHandler = (entries: PerformanceEventTiming[]): void => {\n    for (const entry of entries) {\n      const transaction = getActiveTransaction() as IdleTransaction | undefined;\n      if (!transaction) {\n        return;\n      }\n\n      if (entry.name === 'click') {\n        const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n        const duration = msToSec(entry.duration);\n\n        transaction.startChild({\n          description: htmlTreeAsString(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          origin: 'auto.ui.browser.metrics',\n          startTimestamp: startTime,\n          endTimestamp: startTime + duration,\n        });\n      }\n    }\n  };\n\n  observe('event', entryHandler, { durationThreshold: 0 });\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): ReturnType<typeof onCLS> {\n  // See:\n  // https://web.dev/evolving-cls/\n  // https://web.dev/cls-web-tooling/\n  return onCLS(metric => {\n    const entry = metric.entries.pop();\n    if (!entry) {\n      return;\n    }\n\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding CLS');\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry as LayoutShift;\n  });\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): ReturnType<typeof onLCP> {\n  return onLCP(metric => {\n    const entry = metric.entries.pop();\n    if (!entry) {\n      return;\n    }\n\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding LCP');\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry as LargestContentfulPaint;\n  });\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): void {\n  onFID(metric => {\n    const entry = metric.entries.pop();\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n    const startTime = msToSec(entry.startTime);\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding FID');\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(transaction: Transaction): void {\n  const performance = getBrowserPerformanceAPI();\n  if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  __DEBUG_BUILD__ && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n  const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n  const performanceEntries = performance.getEntries();\n\n  let responseStartTimestamp: number | undefined;\n  let requestStartTimestamp: number | undefined;\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  performanceEntries.slice(_performanceCursor).forEach((entry: Record<string, any>) => {\n    const startTime = msToSec(entry.startTime);\n    const duration = msToSec(entry.duration);\n\n    if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(transaction, entry, timeOrigin);\n        responseStartTimestamp = timeOrigin + msToSec(entry.responseStart);\n        requestStartTimestamp = timeOrigin + msToSec(entry.requestStart);\n        break;\n      }\n      case 'mark':\n      case 'paint':\n      case 'measure': {\n        _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n        // capture web vitals\n        const firstHidden = getVisibilityWatcher();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          __DEBUG_BUILD__ && logger.log('[Measurements] Adding FP');\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          __DEBUG_BUILD__ && logger.log('[Measurements] Adding FCP');\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        const resourceName = (entry.name as string).replace(WINDOW.location.origin, '');\n        _addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin);\n        break;\n      }\n      default:\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(transaction);\n\n  // Measurements are only available for pageload transactions\n  if (transaction.op === 'pageload') {\n    // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n    // start of the response in milliseconds\n    if (typeof responseStartTimestamp === 'number') {\n      __DEBUG_BUILD__ && logger.log('[Measurements] Adding TTFB');\n      _measurements['ttfb'] = {\n        value: (responseStartTimestamp - transaction.startTimestamp) * 1000,\n        unit: 'millisecond',\n      };\n\n      if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n        // Capture the time spent making the request and receiving the first byte of the response.\n        // This is the time between the start of the request and the start of the response in milliseconds.\n        _measurements['ttfb.requestTime'] = {\n          value: (responseStartTimestamp - requestStartTimestamp) * 1000,\n          unit: 'millisecond',\n        };\n      }\n    }\n\n    ['fcp', 'fp', 'lcp'].forEach(name => {\n      if (!_measurements[name] || timeOrigin >= transaction.startTimestamp) {\n        return;\n      }\n      // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n      // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n      // to be adjusted to be relative to transaction.startTimestamp.\n      const oldValue = _measurements[name].value;\n      const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n      // normalizedValue should be in milliseconds\n      const normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n      const delta = normalizedValue - oldValue;\n\n      __DEBUG_BUILD__ &&\n        logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n      _measurements[name].value = normalizedValue;\n    });\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      _startChild(transaction, {\n        description: 'first input delay',\n        endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n        op: 'ui.action',\n        origin: 'auto.ui.browser.metrics',\n        startTimestamp: fidMark.value,\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\n    }\n\n    // If FCP is not recorded we should not record the cls value\n    // according to the new definition of CLS.\n    if (!('fcp' in _measurements)) {\n      delete _measurements.cls;\n    }\n\n    Object.keys(_measurements).forEach(measurementName => {\n      transaction.setMeasurement(\n        measurementName,\n        _measurements[measurementName].value,\n        _measurements[measurementName].unit,\n      );\n    });\n\n    _tagMetricInfo(transaction);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/** Create measure related spans */\nexport function _addMeasureSpans(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): number {\n  const measureStartTimestamp = timeOrigin + startTime;\n  const measureEndTimestamp = measureStartTimestamp + duration;\n\n  _startChild(transaction, {\n    description: entry.name as string,\n    endTimestamp: measureEndTimestamp,\n    op: entry.entryType as string,\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp: measureStartTimestamp,\n  });\n\n  return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n    _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n  });\n  _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n  _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n  _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n  _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  transaction: Transaction,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  entry: Record<string, any>,\n  event: string,\n  timeOrigin: number,\n  description?: string,\n  eventEnd?: string,\n): void {\n  const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n  const start = entry[`${event}Start`] as number | undefined;\n  if (!start || !end) {\n    return;\n  }\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: description || event,\n    startTimestamp: timeOrigin + msToSec(start),\n    endTimestamp: timeOrigin + msToSec(end),\n  });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction: Transaction, entry: Record<string, any>, timeOrigin: number): void {\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: 'request',\n    startTimestamp: timeOrigin + msToSec(entry.requestStart as number),\n    endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n  });\n\n  _startChild(transaction, {\n    op: 'browser',\n    origin: 'auto.browser.browser.metrics',\n    description: 'response',\n    startTimestamp: timeOrigin + msToSec(entry.responseStart as number),\n    endTimestamp: timeOrigin + msToSec(entry.responseEnd as number),\n  });\n}\n\nexport interface ResourceEntry extends Record<string, unknown> {\n  initiatorType?: string;\n  transferSize?: number;\n  encodedBodySize?: number;\n  decodedBodySize?: number;\n  renderBlockingStatus?: string;\n}\n\n/** Create resource-related spans */\nexport function _addResourceSpans(\n  transaction: Transaction,\n  entry: ResourceEntry,\n  resourceName: string,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): void {\n  // we already instrument based on fetch and xhr, so we don't need to\n  // duplicate spans here.\n  if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n    return;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const data: Record<string, any> = {};\n  if ('transferSize' in entry) {\n    data['http.response_transfer_size'] = entry.transferSize;\n  }\n  if ('encodedBodySize' in entry) {\n    data['http.response_content_length'] = entry.encodedBodySize;\n  }\n  if ('decodedBodySize' in entry) {\n    data['http.decoded_response_content_length'] = entry.decodedBodySize;\n  }\n  if ('renderBlockingStatus' in entry) {\n    data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n  }\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  _startChild(transaction, {\n    description: resourceName,\n    endTimestamp,\n    op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n    origin: 'auto.resource.browser.metrics',\n    startTimestamp,\n    data,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction: Transaction): void {\n  const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      transaction.setTag('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      transaction.setTag('connectionType', connection.type);\n    }\n\n    if (isMeasurementValue(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction: Transaction): void {\n  if (_lcpEntry) {\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding LCP Data');\n\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      transaction.setTag('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    transaction.setTag('lcp.size', _lcpEntry.size);\n  }\n\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n  if (_clsEntry && _clsEntry.sources) {\n    __DEBUG_BUILD__ && logger.log('[Measurements] Adding CLS Data');\n    _clsEntry.sources.forEach((source, index) =>\n      transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n", "/* eslint-disable max-lines */\nimport { getCurrentHub, getDynamicSamplingContextFromClient, hasTracingEnabled } from '@sentry/core';\nimport type { Client, Scope, Span } from '@sentry/types';\nimport {\n  addInstrumentationHandler,\n  BAGGAGE_HEADER_NAME,\n  browserPerformanceTimeOrigin,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  isInstanceOf,\n  SENTRY_XHR_DATA_KEY,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\n\nexport const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n  /**\n   * @deprecated Will be removed in v8.\n   * Use `shouldCreateSpanForRequest` to control span creation and `tracePropagationTargets` to control\n   * trace header attachment.\n   */\n  tracingOrigins: Array<string | RegExp>;\n\n  /**\n   * List of strings and/or regexes used to determine which outgoing requests will have `sentry-trace` and `baggage`\n   * headers attached.\n   *\n   * @deprecated Use the top-level `tracePropagationTargets` option in `Sentry.init` instead.\n   * This option will be removed in v8.\n   *\n   * Default: ['localhost', /^\\//] @see {DEFAULT_TRACE_PROPAGATION_TARGETS}\n   */\n  tracePropagationTargets: Array<string | RegExp>;\n\n  /**\n   * Flag to disable patching all together for fetch requests.\n   *\n   * Default: true\n   */\n  traceFetch: boolean;\n\n  /**\n   * Flag to disable patching all together for xhr requests.\n   *\n   * Default: true\n   */\n  traceXHR: boolean;\n\n  /**\n   * If true, Sentry will capture http timings and add them to the corresponding http spans.\n   *\n   * Default: true\n   */\n  enableHTTPTimings: boolean;\n\n  /**\n   * This function will be called before creating a span for a request with the given url.\n   * Return false if you don't want a span for the given url.\n   *\n   * Default: (url: string) => true\n   */\n  shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\n/** Data returned from fetch callback */\nexport interface FetchData {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  args: any[]; // the arguments passed to the fetch call itself\n  fetchData?: {\n    method: string;\n    url: string;\n    // span_id\n    __span?: string;\n  };\n\n  // TODO Should this be unknown instead? If we vendor types, make it a Response\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  response?: any;\n  error?: unknown;\n\n  startTimestamp: number;\n  endTimestamp?: number;\n}\n\n/** Data returned from XHR request */\nexport interface XHRData {\n  xhr?: {\n    [SENTRY_XHR_DATA_KEY]?: {\n      method: string;\n      url: string;\n      status_code: number;\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      data: Record<string, any>;\n    };\n    __sentry_xhr_span_id__?: string;\n    setRequestHeader?: (key: string, val: string) => void;\n    getRequestHeader?: (key: string) => string;\n    __sentry_own_request__?: boolean;\n  };\n  startTimestamp: number;\n  endTimestamp?: number;\n}\n\ntype PolymorphicRequestHeaders =\n  | Record<string, string | undefined>\n  | Array<[string, string]>\n  // the below is not preicsely the Header type used in Request, but it'll pass duck-typing\n  | {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      [key: string]: any;\n      append: (key: string, value: string) => void;\n      get: (key: string) => string | null | undefined;\n    };\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n  // TODO (v8): Remove this property\n  tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n  tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nexport function instrumentOutgoingRequests(_options?: Partial<RequestInstrumentationOptions>): void {\n  const {\n    traceFetch,\n    traceXHR,\n    // eslint-disable-next-line deprecation/deprecation\n    tracePropagationTargets,\n    // eslint-disable-next-line deprecation/deprecation\n    tracingOrigins,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n  } = {\n    traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n    traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n  // TODO(v8) Remove tracingOrigins here\n  // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n  // and we don't want to break the API. We can remove it in v8.\n  const shouldAttachHeadersWithTargets = (url: string): boolean =>\n    shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n  const spans: Record<string, Span> = {};\n\n  if (traceFetch) {\n    addInstrumentationHandler('fetch', (handlerData: FetchData) => {\n      const createdSpan = fetchCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addInstrumentationHandler('xhr', (handlerData: XHRData) => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n  const url = span.data.url;\n  const observer = new PerformanceObserver(list => {\n    const entries = list.getEntries();\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setData(...data));\n        observer.disconnect();\n      }\n    });\n  });\n  observer.observe({\n    entryTypes: ['resource'],\n  });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/');\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1];\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n  return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n  const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n  const timingSpanData: [string, string | number][] = [];\n\n  timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n  if (!browserPerformanceTimeOrigin) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nexport function shouldAttachHeaders(url: string, tracePropagationTargets: (string | RegExp)[] | undefined): boolean {\n  return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track fetch request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function fetchCallback(\n  handlerData: FetchData,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n): Span | undefined {\n  if (!hasTracingEnabled() || !handlerData.fetchData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      if (handlerData.response) {\n        // TODO (kmclb) remove this once types PR goes through\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        span.setHttpStatus(handlerData.response.status);\n\n        const contentLength: string =\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n          handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n        const contentLengthNum = parseInt(contentLength);\n        if (contentLengthNum > 0) {\n          span.setData('http.response_content_length', contentLengthNum);\n        }\n      } else if (handlerData.error) {\n        span.setStatus('internal_error');\n      }\n      span.finish();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const client = hub.getClient();\n  const parentSpan = scope.getSpan();\n\n  const { method, url } = handlerData.fetchData;\n\n  const span =\n    shouldCreateSpanResult && parentSpan\n      ? parentSpan.startChild({\n          data: {\n            url,\n            type: 'fetch',\n            'http.method': method,\n          },\n          description: `${method} ${url}`,\n          op: 'http.client',\n          origin: 'auto.http.browser',\n        })\n      : undefined;\n\n  if (span) {\n    handlerData.fetchData.__span = span.spanId;\n    spans[span.spanId] = span;\n  }\n\n  if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n    const request: string | Request = handlerData.args[0];\n\n    // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n    handlerData.args[1] = handlerData.args[1] || {};\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const options: { [key: string]: any } = handlerData.args[1];\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n    options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nexport function addTracingHeadersToFetchRequest(\n  request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package,\n  client: Client,\n  scope: Scope,\n  options: {\n    headers?:\n      | {\n          [key: string]: string[] | string | undefined;\n        }\n      | PolymorphicRequestHeaders;\n  },\n  requestSpan?: Span,\n): PolymorphicRequestHeaders | undefined {\n  const span = requestSpan || scope.getSpan();\n\n  const transaction = span && span.transaction;\n\n  const { traceId, sampled, dsc } = scope.getPropagationContext();\n\n  const sentryTraceHeader = span ? span.toTraceparent() : generateSentryTraceHeader(traceId, undefined, sampled);\n  const dynamicSamplingContext = transaction\n    ? transaction.getDynamicSamplingContext()\n    : dsc\n    ? dsc\n    : getDynamicSamplingContextFromClient(traceId, client, scope);\n\n  const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n\n  const headers =\n    typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : options.headers;\n\n  if (!headers) {\n    return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n  } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n    const newHeaders = new Headers(headers as Headers);\n\n    newHeaders.append('sentry-trace', sentryTraceHeader);\n\n    if (sentryBaggageHeader) {\n      // If the same header is appended multiple times the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else if (Array.isArray(headers)) {\n    const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n    if (sentryBaggageHeader) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else {\n    const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n    const newBaggageHeaders: string[] = [];\n\n    if (Array.isArray(existingBaggageHeader)) {\n      newBaggageHeaders.push(...existingBaggageHeader);\n    } else if (existingBaggageHeader) {\n      newBaggageHeaders.push(existingBaggageHeader);\n    }\n\n    if (sentryBaggageHeader) {\n      newBaggageHeaders.push(sentryBaggageHeader);\n    }\n\n    return {\n      ...(headers as Exclude<typeof headers, Headers>),\n      'sentry-trace': sentryTraceHeader,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nexport function xhrCallback(\n  handlerData: XHRData,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n): Span | undefined {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n  if (!hasTracingEnabled() || (xhr && xhr.__sentry_own_request__) || !xhr || !sentryXhrData) {\n    return undefined;\n  }\n\n  const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      span.setHttpStatus(sentryXhrData.status_code);\n      span.finish();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const hub = getCurrentHub();\n  const scope = hub.getScope();\n  const parentSpan = scope.getSpan();\n\n  const span =\n    shouldCreateSpanResult && parentSpan\n      ? parentSpan.startChild({\n          data: {\n            ...sentryXhrData.data,\n            type: 'xhr',\n            'http.method': sentryXhrData.method,\n            url: sentryXhrData.url,\n          },\n          description: `${sentryXhrData.method} ${sentryXhrData.url}`,\n          op: 'http.client',\n          origin: 'auto.http.browser',\n        })\n      : undefined;\n\n  if (span) {\n    xhr.__sentry_xhr_span_id__ = span.spanId;\n    spans[xhr.__sentry_xhr_span_id__] = span;\n  }\n\n  if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) {\n    if (span) {\n      const transaction = span && span.transaction;\n      const dynamicSamplingContext = transaction && transaction.getDynamicSamplingContext();\n      const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n      setHeaderOnXhr(xhr, span.toTraceparent(), sentryBaggageHeader);\n    } else {\n      const client = hub.getClient();\n      const { traceId, sampled, dsc } = scope.getPropagationContext();\n      const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);\n      const dynamicSamplingContext =\n        dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);\n      const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n      setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n    }\n  }\n\n  return span;\n}\n\nfunction setHeaderOnXhr(\n  xhr: NonNullable<XHRData['xhr']>,\n  sentryTraceHeader: string,\n  sentryBaggageHeader: string | undefined,\n): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n      // We can therefore simply set a baggage header without checking what was there before\n      // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      xhr.setRequestHeader!(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n    }\n  } catch (_) {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n", "import type { Transaction, TransactionContext } from '@sentry/types';\nimport { addInstrumentationHandler, browserPerformanceTimeOrigin, logger } from '@sentry/utils';\n\nimport { WINDOW } from './types';\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nexport function instrumentRoutingWithDefaults<T extends Transaction>(\n  customStartTransaction: (context: TransactionContext) => T | undefined,\n  startTransactionOnPageLoad: boolean = true,\n  startTransactionOnLocationChange: boolean = true,\n): void {\n  if (!WINDOW || !WINDOW.location) {\n    __DEBUG_BUILD__ && logger.warn('Could not initialize routing instrumentation due to invalid location');\n    return;\n  }\n\n  let startingUrl: string | undefined = WINDOW.location.href;\n\n  let activeTransaction: T | undefined;\n  if (startTransactionOnPageLoad) {\n    activeTransaction = customStartTransaction({\n      name: WINDOW.location.pathname,\n      // pageload should always start at timeOrigin (and needs to be in s, not ms)\n      startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n      op: 'pageload',\n      origin: 'auto.pageload.browser',\n      metadata: { source: 'url' },\n    });\n  }\n\n  if (startTransactionOnLocationChange) {\n    addInstrumentationHandler('history', ({ to, from }: { to: string; from?: string }) => {\n      /**\n       * This early return is there to account for some cases where a navigation transaction starts right after\n       * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n       * create an uneccessary navigation transaction.\n       *\n       * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n       * only be caused in certain development environments where the usage of a hot module reloader is causing\n       * errors.\n       */\n      if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n        startingUrl = undefined;\n        return;\n      }\n\n      if (from !== to) {\n        startingUrl = undefined;\n        if (activeTransaction) {\n          __DEBUG_BUILD__ && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n          // If there's an open transaction on the scope, we need to finish it before creating an new one.\n          activeTransaction.finish();\n        }\n        activeTransaction = customStartTransaction({\n          name: WINDOW.location.pathname,\n          op: 'navigation',\n          origin: 'auto.navigation.browser',\n          metadata: { source: 'url' },\n        });\n      }\n    });\n  }\n}\n", "/* eslint-disable max-lines */\nimport type { Hub, IdleTransaction } from '@sentry/core';\nimport { addTracingExtensions, getActiveTransaction, startIdleTransaction, TRACING_DEFAULTS } from '@sentry/core';\nimport type { EventProcessor, Integration, Transaction, TransactionContext, TransactionSource } from '@sentry/types';\nimport { getDomElement, logger, tracingContextFromHeaders } from '@sentry/utils';\n\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport {\n  addPerformanceEntries,\n  startTrackingInteractions,\n  startTrackingLongTasks,\n  startTrackingWebVitals,\n} from './metrics';\nimport type { RequestInstrumentationOptions } from './request';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\nimport { instrumentRoutingWithDefaults } from './router';\nimport { WINDOW } from './types';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions extends RequestInstrumentationOptions {\n  /**\n   * The time to wait in ms until the transaction will be finished during an idle state. An idle state is defined\n   * by a moment where there are no in-progress spans.\n   *\n   * The transaction will use the end timestamp of the last finished span as the endtime for the transaction.\n   * If there are still active spans when this the `idleTimeout` is set, the `idleTimeout` will get reset.\n   * Time is in ms.\n   *\n   * Default: 1000\n   */\n  idleTimeout: number;\n\n  /**\n   * The max duration for a transaction. If a transaction duration hits the `finalTimeout` value, it\n   * will be finished.\n   * Time is in ms.\n   *\n   * Default: 30000\n   */\n  finalTimeout: number;\n\n  /**\n   * The heartbeat interval. If no new spans are started or open spans are finished within 3 heartbeats,\n   * the transaction will be finished.\n   * Time is in ms.\n   *\n   * Default: 5000\n   */\n  heartbeatInterval: number;\n\n  /**\n   * Flag to enable/disable creation of `navigation` transaction on history changes.\n   *\n   * Default: true\n   */\n  startTransactionOnLocationChange: boolean;\n\n  /**\n   * Flag to enable/disable creation of `pageload` transaction on first pageload.\n   *\n   * Default: true\n   */\n  startTransactionOnPageLoad: boolean;\n\n  /**\n   * Flag Transactions where tabs moved to background with \"cancelled\". Browser background tab timing is\n   * not suited towards doing precise measurements of operations. By default, we recommend that this option\n   * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n   *\n   * Default: true\n   */\n  markBackgroundTransactions: boolean;\n\n  /**\n   * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n   *\n   * Default: true\n   */\n  enableLongTask: boolean;\n\n  /**\n   * _metricOptions allows the user to send options to change how metrics are collected.\n   *\n   * _metricOptions is currently experimental.\n   *\n   * Default: undefined\n   */\n  _metricOptions?: Partial<{\n    /**\n     * @deprecated This property no longer has any effect and will be removed in v8.\n     */\n    _reportAllChanges: boolean;\n  }>;\n\n  /**\n   * _experiments allows the user to send options to define how this integration works.\n   * Note that the `enableLongTask` options is deprecated in favor of the option at the top level, and will be removed in v8.\n   *\n   * TODO (v8): Remove enableLongTask\n   *\n   * Default: undefined\n   */\n  _experiments: Partial<{\n    enableLongTask: boolean;\n    enableInteractions: boolean;\n    onStartRouteTransaction: (t: Transaction | undefined, ctx: TransactionContext, getCurrentHub: () => Hub) => void;\n  }>;\n\n  /**\n   * beforeNavigate is called before a pageload/navigation transaction is created and allows users to modify transaction\n   * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n   *\n   * Note: For legacy reasons, transactions can also be dropped by returning `undefined`.\n   *\n   * @param context: The context data which will be passed to `startTransaction` by default\n   *\n   * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n   */\n  beforeNavigate?(this: void, context: TransactionContext): TransactionContext | undefined;\n\n  /**\n   * Instrumentation that creates routing change transactions. By default creates\n   * pageload and navigation transactions.\n   */\n  routingInstrumentation<T extends Transaction>(\n    this: void,\n    customStartTransaction: (context: TransactionContext) => T | undefined,\n    startTransactionOnPageLoad?: boolean,\n    startTransactionOnLocationChange?: boolean,\n  ): void;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n  ...TRACING_DEFAULTS,\n  markBackgroundTransactions: true,\n  routingInstrumentation: instrumentRoutingWithDefaults,\n  startTransactionOnLocationChange: true,\n  startTransactionOnPageLoad: true,\n  enableLongTask: true,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\nexport class BrowserTracing implements Integration {\n  // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n  // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n  // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n  // integrations.\n\n  /** Browser Tracing integration options */\n  public options: BrowserTracingOptions;\n\n  /**\n   * @inheritDoc\n   */\n  public name: string;\n\n  private _getCurrentHub?: () => Hub;\n\n  private _latestRouteName?: string;\n  private _latestRouteSource?: TransactionSource;\n\n  private _collectWebVitals: () => void;\n\n  private _hasSetTracePropagationTargets: boolean;\n\n  public constructor(_options?: Partial<BrowserTracingOptions>) {\n    this.name = BROWSER_TRACING_INTEGRATION_ID;\n    this._hasSetTracePropagationTargets = false;\n\n    addTracingExtensions();\n\n    if (__DEBUG_BUILD__) {\n      this._hasSetTracePropagationTargets = !!(\n        _options &&\n        // eslint-disable-next-line deprecation/deprecation\n        (_options.tracePropagationTargets || _options.tracingOrigins)\n      );\n    }\n\n    this.options = {\n      ...DEFAULT_BROWSER_TRACING_OPTIONS,\n      ..._options,\n    };\n\n    // Special case: enableLongTask can be set in _experiments\n    // TODO (v8): Remove this in v8\n    if (this.options._experiments.enableLongTask !== undefined) {\n      this.options.enableLongTask = this.options._experiments.enableLongTask;\n    }\n\n    // TODO (v8): remove this block after tracingOrigins is removed\n    // Set tracePropagationTargets to tracingOrigins if specified by the user\n    // In case both are specified, tracePropagationTargets takes precedence\n    // eslint-disable-next-line deprecation/deprecation\n    if (_options && !_options.tracePropagationTargets && _options.tracingOrigins) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.options.tracePropagationTargets = _options.tracingOrigins;\n    }\n\n    this._collectWebVitals = startTrackingWebVitals();\n    if (this.options.enableLongTask) {\n      startTrackingLongTasks();\n    }\n    if (this.options._experiments.enableInteractions) {\n      startTrackingInteractions();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this._getCurrentHub = getCurrentHub;\n    const hub = getCurrentHub();\n    const client = hub.getClient();\n    const clientOptions = client && client.getOptions();\n\n    const {\n      routingInstrumentation: instrumentRouting,\n      startTransactionOnLocationChange,\n      startTransactionOnPageLoad,\n      markBackgroundTransactions,\n      traceFetch,\n      traceXHR,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n      _experiments,\n    } = this.options;\n\n    const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n    // There are three ways to configure tracePropagationTargets:\n    // 1. via top level client option `tracePropagationTargets`\n    // 2. via BrowserTracing option `tracePropagationTargets`\n    // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n    //\n    // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n    // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n    // This is done as it minimizes bundle size (we don't have to have undefined checks).\n    //\n    // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n    // eslint-disable-next-line deprecation/deprecation\n    const tracePropagationTargets = clientOptionsTracePropagationTargets || this.options.tracePropagationTargets;\n    if (__DEBUG_BUILD__ && this._hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n      logger.warn(\n        '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n      );\n    }\n\n    instrumentRouting(\n      (context: TransactionContext) => {\n        const transaction = this._createRouteTransaction(context);\n\n        this.options._experiments.onStartRouteTransaction &&\n          this.options._experiments.onStartRouteTransaction(transaction, context, getCurrentHub);\n\n        return transaction;\n      },\n      startTransactionOnPageLoad,\n      startTransactionOnLocationChange,\n    );\n\n    if (markBackgroundTransactions) {\n      registerBackgroundTabDetection();\n    }\n\n    if (_experiments.enableInteractions) {\n      this._registerInteractionListener();\n    }\n\n    instrumentOutgoingRequests({\n      traceFetch,\n      traceXHR,\n      tracePropagationTargets,\n      shouldCreateSpanForRequest,\n      enableHTTPTimings,\n    });\n  }\n\n  /** Create routing idle transaction. */\n  private _createRouteTransaction(context: TransactionContext): Transaction | undefined {\n    if (!this._getCurrentHub) {\n      __DEBUG_BUILD__ &&\n        logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n      return undefined;\n    }\n\n    const hub = this._getCurrentHub();\n\n    const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n\n    const isPageloadTransaction = context.op === 'pageload';\n\n    const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n    const baggage = isPageloadTransaction ? getMetaContent('baggage') : '';\n    const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n      sentryTrace,\n      baggage,\n    );\n\n    const expandedContext: TransactionContext = {\n      ...context,\n      ...traceparentData,\n      metadata: {\n        ...context.metadata,\n        dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n      },\n      trimEnd: true,\n    };\n\n    const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n    // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n    // from being sent to Sentry).\n    const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n    // If `beforeNavigate` set a custom name, record that fact\n    finalContext.metadata =\n      finalContext.name !== expandedContext.name\n        ? { ...finalContext.metadata, source: 'custom' }\n        : finalContext.metadata;\n\n    this._latestRouteName = finalContext.name;\n    this._latestRouteSource = finalContext.metadata && finalContext.metadata.source;\n\n    if (finalContext.sampled === false) {\n      __DEBUG_BUILD__ &&\n        logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n    }\n\n    __DEBUG_BUILD__ && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n    const { location } = WINDOW;\n\n    const idleTransaction = startIdleTransaction(\n      hub,\n      finalContext,\n      idleTimeout,\n      finalTimeout,\n      true,\n      { location }, // for use in the tracesSampler\n      heartbeatInterval,\n    );\n\n    const scope = hub.getScope();\n\n    // If it's a pageload and there is a meta tag set\n    // use the traceparentData as the propagation context\n    if (isPageloadTransaction && traceparentData) {\n      scope.setPropagationContext(propagationContext);\n    } else {\n      // Navigation transactions should set a new propagation context based on the\n      // created idle transaction.\n      scope.setPropagationContext({\n        traceId: idleTransaction.traceId,\n        spanId: idleTransaction.spanId,\n        parentSpanId: idleTransaction.parentSpanId,\n        sampled: idleTransaction.sampled,\n      });\n    }\n\n    idleTransaction.registerBeforeFinishCallback(transaction => {\n      this._collectWebVitals();\n      addPerformanceEntries(transaction);\n    });\n\n    return idleTransaction as Transaction;\n  }\n\n  /** Start listener for interaction transactions */\n  private _registerInteractionListener(): void {\n    let inflightInteractionTransaction: IdleTransaction | undefined;\n    const registerInteractionTransaction = (): void => {\n      const { idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n      const op = 'ui.action.click';\n\n      const currentTransaction = getActiveTransaction();\n      if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n        __DEBUG_BUILD__ &&\n          logger.warn(\n            `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n          );\n        return undefined;\n      }\n\n      if (inflightInteractionTransaction) {\n        inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n        inflightInteractionTransaction.finish();\n        inflightInteractionTransaction = undefined;\n      }\n\n      if (!this._getCurrentHub) {\n        __DEBUG_BUILD__ && logger.warn(`[Tracing] Did not create ${op} transaction because _getCurrentHub is invalid.`);\n        return undefined;\n      }\n\n      if (!this._latestRouteName) {\n        __DEBUG_BUILD__ &&\n          logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n        return undefined;\n      }\n\n      const hub = this._getCurrentHub();\n      const { location } = WINDOW;\n\n      const context: TransactionContext = {\n        name: this._latestRouteName,\n        op,\n        trimEnd: true,\n        metadata: {\n          source: this._latestRouteSource || 'url',\n        },\n      };\n\n      inflightInteractionTransaction = startIdleTransaction(\n        hub,\n        context,\n        idleTimeout,\n        finalTimeout,\n        true,\n        { location }, // for use in the tracesSampler\n        heartbeatInterval,\n      );\n    };\n\n    ['click'].forEach(type => {\n      addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n    });\n  }\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n  // Can't specify generic to `getDomElement` because tracing can be used\n  // in a variety of environments, have to disable `no-unsafe-member-access`\n  // as a result.\n  const metaTag = getDomElement(`meta[name=${metaName}]`);\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n", "import { addTracingExtensions, getMainCarrier } from '@sentry/core';\nimport type { Integration, IntegrationClass } from '@sentry/types';\nimport { dynamicRequire, isNodeEnv, loadModule } from '@sentry/utils';\n\n/**\n * @private\n */\nfunction _autoloadDatabaseIntegrations(): void {\n  const carrier = getMainCarrier();\n  if (!carrier.__SENTRY__) {\n    return;\n  }\n\n  const packageToIntegrationMapping: Record<string, () => Integration> = {\n    mongodb() {\n      const integration = dynamicRequire(module, './node/integrations/mongo') as {\n        Mongo: IntegrationClass<Integration>;\n      };\n      return new integration.Mongo();\n    },\n    mongoose() {\n      const integration = dynamicRequire(module, './node/integrations/mongo') as {\n        Mongo: IntegrationClass<Integration>;\n      };\n      return new integration.Mongo();\n    },\n    mysql() {\n      const integration = dynamicRequire(module, './node/integrations/mysql') as {\n        Mysql: IntegrationClass<Integration>;\n      };\n      return new integration.Mysql();\n    },\n    pg() {\n      const integration = dynamicRequire(module, './node/integrations/postgres') as {\n        Postgres: IntegrationClass<Integration>;\n      };\n      return new integration.Postgres();\n    },\n  };\n\n  const mappedPackages = Object.keys(packageToIntegrationMapping)\n    .filter(moduleName => !!loadModule(moduleName))\n    .map(pkg => {\n      try {\n        return packageToIntegrationMapping[pkg]();\n      } catch (e) {\n        return undefined;\n      }\n    })\n    .filter(p => p) as Integration[];\n\n  if (mappedPackages.length > 0) {\n    carrier.__SENTRY__.integrations = [...(carrier.__SENTRY__.integrations || []), ...mappedPackages];\n  }\n}\n\n/**\n * This patches the global object and injects the Tracing extensions methods\n */\nexport function addExtensionMethods(): void {\n  addTracingExtensions();\n\n  // Detect and automatically load specified integrations.\n  if (isNodeEnv()) {\n    _autoloadDatabaseIntegrations();\n  }\n}\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst core = require('@sentry/core');\nconst utils = require('@sentry/utils');\nconst express = require('./node/integrations/express.js');\nconst postgres = require('./node/integrations/postgres.js');\nconst mysql = require('./node/integrations/mysql.js');\nconst mongo = require('./node/integrations/mongo.js');\nconst prisma = require('./node/integrations/prisma.js');\nconst graphql = require('./node/integrations/graphql.js');\nconst apollo = require('./node/integrations/apollo.js');\nconst lazy = require('./node/integrations/lazy.js');\nconst browsertracing = require('./browser/browsertracing.js');\nconst request = require('./browser/request.js');\nconst extensions = require('./extensions.js');\n\n\n\nexports.IdleTransaction = core.IdleTransaction;\nexports.Span = core.Span;\nexports.SpanStatus = core.SpanStatus;\nexports.Transaction = core.Transaction;\nexports.extractTraceparentData = core.extractTraceparentData;\nexports.getActiveTransaction = core.getActiveTransaction;\nexports.hasTracingEnabled = core.hasTracingEnabled;\nexports.spanStatusfromHttpCode = core.spanStatusfromHttpCode;\nexports.startIdleTransaction = core.startIdleTransaction;\nexports.TRACEPARENT_REGEXP = utils.TRACEPARENT_REGEXP;\nexports.stripUrlQueryAndFragment = utils.stripUrlQueryAndFragment;\nexports.Express = express.Express;\nexports.Postgres = postgres.Postgres;\nexports.Mysql = mysql.Mysql;\nexports.Mongo = mongo.Mongo;\nexports.Prisma = prisma.Prisma;\nexports.GraphQL = graphql.GraphQL;\nexports.Apollo = apollo.Apollo;\nexports.lazyLoadedNodePerformanceMonitoringIntegrations = lazy.lazyLoadedNodePerformanceMonitoringIntegrations;\nexports.BROWSER_TRACING_INTEGRATION_ID = browsertracing.BROWSER_TRACING_INTEGRATION_ID;\nexports.BrowserTracing = browsertracing.BrowserTracing;\nexports.addTracingHeadersToFetchRequest = request.addTracingHeadersToFetchRequest;\nexports.defaultRequestInstrumentationOptions = request.defaultRequestInstrumentationOptions;\nexports.instrumentOutgoingRequests = request.instrumentOutgoingRequests;\nexports.addExtensionMethods = extensions.addExtensionMethods;\n//# sourceMappingURL=index.js.map\n", "import type { LazyLoadedIntegration } from '@sentry-internal/tracing';\nimport { lazyLoadedNodePerformanceMonitoringIntegrations } from '@sentry-internal/tracing';\nimport type { Integration } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\n/**\n * Automatically detects and returns integrations that will work with your dependencies.\n */\nexport function autoDiscoverNodePerformanceMonitoringIntegrations(): Integration[] {\n  const loadedIntegrations = lazyLoadedNodePerformanceMonitoringIntegrations\n    .map(tryLoad => {\n      try {\n        return tryLoad();\n      } catch (_) {\n        return undefined;\n      }\n    })\n    .filter(integration => !!integration) as LazyLoadedIntegration[];\n\n  if (loadedIntegrations.length === 0) {\n    logger.warn('Performance monitoring integrations could not be automatically loaded.');\n  }\n\n  // Only return integrations where their dependencies loaded successfully.\n  return loadedIntegrations.filter(integration => !!integration.loadDependency());\n}\n", "import { getCurrentHub } from '@sentry/core';\nimport type {\n  Event,\n  EventHint,\n  Exception,\n  Mechanism,\n  Severity,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/types';\nimport {\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  extractExceptionKeysForMessage,\n  isError,\n  isPlainObject,\n  normalizeToSize,\n} from '@sentry/utils';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n  return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n  const exception: Exception = {\n    type: error.name || error.constructor.name,\n    value: error.message,\n  };\n\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  return exception;\n}\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nexport function eventFromUnknownInput(stackParser: StackParser, exception: unknown, hint?: EventHint): Event {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let ex: unknown = exception;\n  const providedMechanism: Mechanism | undefined =\n    hint && hint.data && (hint.data as { mechanism: Mechanism }).mechanism;\n  const mechanism: Mechanism = providedMechanism || {\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      const hub = getCurrentHub();\n      const client = hub.getClient();\n      const normalizeDepth = client && client.getOptions().normalizeDepth;\n      hub.configureScope(scope => {\n        scope.setExtra('__serialized__', normalizeToSize(exception, normalizeDepth));\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 as string;\n    }\n    mechanism.synthetic = true;\n  }\n\n  const event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex as Error)],\n    },\n  };\n\n  addExceptionTypeValue(event, undefined, undefined);\n  addExceptionMechanism(event, mechanism);\n\n  return {\n    ...event,\n    event_id: hint && hint.event_id,\n  };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: string,\n  // eslint-disable-next-line deprecation/deprecation\n  level: Severity | SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {\n    event_id: hint && hint.event_id,\n    level,\n    message,\n  };\n\n  if (attachStacktrace && hint && hint.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames },\n          },\n        ],\n      };\n    }\n  }\n\n  return event;\n}\n", "import type { Scope } from '@sentry/core';\nimport {\n  addTracingExtensions,\n  BaseClient,\n  createCheckInEnvelope,\n  getDynamicSamplingContextFromClient,\n  SDK_VERSION,\n  SessionFlusher,\n} from '@sentry/core';\nimport type {\n  CheckIn,\n  DynamicSamplingContext,\n  Event,\n  EventHint,\n  MonitorConfig,\n  SerializedCheckIn,\n  Severity,\n  SeverityLevel,\n  TraceContext,\n} from '@sentry/types';\nimport { logger, resolvedSyncPromise, uuid4 } from '@sentry/utils';\nimport * as os from 'os';\nimport { TextEncoder } from 'util';\n\nimport { eventFromMessage, eventFromUnknownInput } from './eventkhulnasoft';\nimport type { NodeClientOptions } from './types';\n\n/**\n * The Sentry Node SDK Client.\n *\n * @see NodeClientOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class NodeClient extends BaseClient<NodeClientOptions> {\n  protected _sessionFlusher: SessionFlusher | undefined;\n\n  /**\n   * Creates a new Node SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: NodeClientOptions) {\n    options._metadata = options._metadata || {};\n    options._metadata.sdk = options._metadata.sdk || {\n      name: 'sentry.javascript.node',\n      packages: [\n        {\n          name: 'npm:@sentry/node',\n          version: SDK_VERSION,\n        },\n      ],\n      version: SDK_VERSION,\n    };\n\n    // Until node supports global TextEncoder in all versions we support, we are forced to pass it from util\n    options.transportOptions = {\n      textEncoder: new TextEncoder(),\n      ...options.transportOptions,\n    };\n\n    // The Node client always supports tracing\n    addTracingExtensions();\n\n    super(options);\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    // Check if the flag `autoSessionTracking` is enabled, and if `_sessionFlusher` exists because it is initialised only\n    // when the `requestHandler` middleware is used, and hence the expectation is to have SessionAggregates payload\n    // sent to the Server only when the `requestHandler` middleware is used\n    if (this._options.autoSessionTracking && this._sessionFlusher && scope) {\n      const requestSession = scope.getRequestSession();\n\n      // Necessary checks to ensure this is code block is executed only within a request\n      // Should override the status only if `requestSession.status` is `Ok`, which is its initial stage\n      if (requestSession && requestSession.status === 'ok') {\n        requestSession.status = 'errored';\n      }\n    }\n\n    return super.captureException(exception, hint, scope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n    // Check if the flag `autoSessionTracking` is enabled, and if `_sessionFlusher` exists because it is initialised only\n    // when the `requestHandler` middleware is used, and hence the expectation is to have SessionAggregates payload\n    // sent to the Server only when the `requestHandler` middleware is used\n    if (this._options.autoSessionTracking && this._sessionFlusher && scope) {\n      const eventType = event.type || 'exception';\n      const isException =\n        eventType === 'exception' && event.exception && event.exception.values && event.exception.values.length > 0;\n\n      // If the event is of type Exception, then a request session should be captured\n      if (isException) {\n        const requestSession = scope.getRequestSession();\n\n        // Ensure that this is happening within the bounds of a request, and make sure not to override\n        // Session Status if Errored / Crashed\n        if (requestSession && requestSession.status === 'ok') {\n          requestSession.status = 'errored';\n        }\n      }\n    }\n\n    return super.captureEvent(event, hint, scope);\n  }\n\n  /**\n   *\n   * @inheritdoc\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    this._sessionFlusher?.close();\n    return super.close(timeout);\n  }\n\n  /** Method that initialises an instance of SessionFlusher on Client */\n  public initSessionFlusher(): void {\n    const { release, environment } = this._options;\n    if (!release) {\n      __DEBUG_BUILD__ && logger.warn('Cannot initialise an instance of SessionFlusher if no release is provided!');\n    } else {\n      this._sessionFlusher = new SessionFlusher(this, {\n        release,\n        environment,\n      });\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 eventFromException(exception: any, hint?: EventHint): PromiseLike<Event> {\n    return resolvedSyncPromise(eventFromUnknownInput(this._options.stackParser, exception, hint));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: string,\n    // eslint-disable-next-line deprecation/deprecation\n    level: Severity | SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return resolvedSyncPromise(\n      eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n    );\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   * @returns A string representing the id of the check in.\n   */\n  public captureCheckIn(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string {\n    const id = checkIn.status !== 'in_progress' && checkIn.checkInId ? checkIn.checkInId : uuid4();\n    if (!this._isEnabled()) {\n      __DEBUG_BUILD__ && logger.warn('SDK not enabled, will not capture checkin.');\n      return id;\n    }\n\n    const options = this.getOptions();\n    const { release, environment, tunnel } = options;\n\n    const serializedCheckIn: SerializedCheckIn = {\n      check_in_id: id,\n      monitor_slug: checkIn.monitorSlug,\n      status: checkIn.status,\n      release,\n      environment,\n    };\n\n    if (checkIn.status !== 'in_progress') {\n      serializedCheckIn.duration = checkIn.duration;\n    }\n\n    if (monitorConfig) {\n      serializedCheckIn.monitor_config = {\n        schedule: monitorConfig.schedule,\n        checkin_margin: monitorConfig.checkinMargin,\n        max_runtime: monitorConfig.maxRuntime,\n        timezone: monitorConfig.timezone,\n      };\n    }\n\n    const [dynamicSamplingContext, traceContext] = this._getTraceInfoFromScope(scope);\n    if (traceContext) {\n      serializedCheckIn.contexts = {\n        trace: traceContext,\n      };\n    }\n\n    const envelope = createCheckInEnvelope(\n      serializedCheckIn,\n      dynamicSamplingContext,\n      this.getSdkMetadata(),\n      tunnel,\n      this.getDsn(),\n    );\n\n    __DEBUG_BUILD__ && logger.info('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n    void this._sendEnvelope(envelope);\n    return id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike<Event | null> {\n    event.platform = event.platform || 'node';\n    event.contexts = {\n      ...event.contexts,\n      runtime: event.contexts?.runtime || {\n        name: 'node',\n        version: global.process.version,\n      },\n    };\n    event.server_name =\n      event.server_name || this.getOptions().serverName || global.process.env.SENTRY_NAME || os.hostname();\n    return super._prepareEvent(event, hint, scope);\n  }\n\n  /**\n   * Method responsible for capturing/ending a request session by calling `incrementSessionStatusCount` to increment\n   * appropriate session aggregates bucket\n   */\n  protected _captureRequestSession(): void {\n    if (!this._sessionFlusher) {\n      __DEBUG_BUILD__ && logger.warn('Discarded request mode session because autoSessionTracking option was disabled');\n    } else {\n      this._sessionFlusher.incrementSessionStatusCount();\n    }\n  }\n\n  /** Extract trace information from scope */\n  private _getTraceInfoFromScope(\n    scope: Scope | undefined,\n  ): [dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined, traceContext: TraceContext | undefined] {\n    if (!scope) {\n      return [undefined, undefined];\n    }\n\n    const span = scope.getSpan();\n    if (span) {\n      return [span?.transaction?.getDynamicSamplingContext(), span?.getTraceContext()];\n    }\n\n    const { traceId, spanId, parentSpanId, dsc } = scope.getPropagationContext();\n    const traceContext: TraceContext = {\n      trace_id: traceId,\n      span_id: spanId,\n      parent_span_id: parentSpanId,\n    };\n    if (dsc) {\n      return [dsc, traceContext];\n    }\n\n    return [getDynamicSamplingContextFromClient(traceId, this, scope), traceContext];\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 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\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(' ', ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\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,\n\t\t\t...createDebug.skips.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\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\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* 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\tlet m;\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\t// eslint-disable-next-line no-return-assign\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 && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[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 flagForceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tflagForceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.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, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m') ||\n\t\t\thasFlag('color=full') ||\n\t\t\thasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\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', 'DRONE'].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 = Number.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, options = {}) {\n\tconst level = supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options\n\t});\n\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel({isTTY: tty.isatty(1)}),\n\tstderr: getSupportLevel({isTTY: 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.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...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", "import {\n\tAgent,\n\tClientRequest,\n\tRequestOptions,\n\tAgentCallbackCallback,\n\tAgentCallbackPromise,\n\tAgentCallbackReturn\n} from './index';\n\ntype LegacyCallback = (\n\treq: ClientRequest,\n\topts: RequestOptions,\n\tfn: AgentCallbackCallback\n) => void;\n\nexport default function promisify(fn: LegacyCallback): AgentCallbackPromise {\n\treturn function(this: Agent, req: ClientRequest, opts: RequestOptions) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tfn.call(\n\t\t\t\tthis,\n\t\t\t\treq,\n\t\t\t\topts,\n\t\t\t\t(err: Error | null | undefined, rtn?: AgentCallbackReturn) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(rtn);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n}\n", "import net from 'net';\nimport http from 'http';\nimport https from 'https';\nimport { Duplex } from 'stream';\nimport { EventEmitter } from 'events';\nimport createDebug from 'debug';\nimport promisify from './promisify';\n\nconst debug = createDebug('agent-base');\n\nfunction isAgent(v: any): v is createAgent.AgentLike {\n\treturn Boolean(v) && typeof v.addRequest === 'function';\n}\n\nfunction isSecureEndpoint(): boolean {\n\tconst { stack } = new Error();\n\tif (typeof stack !== 'string') return false;\n\treturn stack.split('\\n').some(l => l.indexOf('(https.js:') !== -1  || l.indexOf('node:https:') !== -1);\n}\n\nfunction createAgent(opts?: createAgent.AgentOptions): createAgent.Agent;\nfunction createAgent(\n\tcallback: createAgent.AgentCallback,\n\topts?: createAgent.AgentOptions\n): createAgent.Agent;\nfunction createAgent(\n\tcallback?: createAgent.AgentCallback | createAgent.AgentOptions,\n\topts?: createAgent.AgentOptions\n) {\n\treturn new createAgent.Agent(callback, opts);\n}\n\nnamespace createAgent {\n\texport interface ClientRequest extends http.ClientRequest {\n\t\t_last?: boolean;\n\t\t_hadError?: boolean;\n\t\tmethod: string;\n\t}\n\n\texport interface AgentRequestOptions {\n\t\thost?: string;\n\t\tpath?: string;\n\t\t// `port` on `http.RequestOptions` can be a string or undefined,\n\t\t// but `net.TcpNetConnectOpts` expects only a number\n\t\tport: number;\n\t}\n\n\texport interface HttpRequestOptions\n\t\textends AgentRequestOptions,\n\t\t\tOmit<http.RequestOptions, keyof AgentRequestOptions> {\n\t\tsecureEndpoint: false;\n\t}\n\n\texport interface HttpsRequestOptions\n\t\textends AgentRequestOptions,\n\t\t\tOmit<https.RequestOptions, keyof AgentRequestOptions> {\n\t\tsecureEndpoint: true;\n\t}\n\n\texport type RequestOptions = HttpRequestOptions | HttpsRequestOptions;\n\n\texport type AgentLike = Pick<createAgent.Agent, 'addRequest'> | http.Agent;\n\n\texport type AgentCallbackReturn = Duplex | AgentLike;\n\n\texport type AgentCallbackCallback = (\n\t\terr?: Error | null,\n\t\tsocket?: createAgent.AgentCallbackReturn\n\t) => void;\n\n\texport type AgentCallbackPromise = (\n\t\treq: createAgent.ClientRequest,\n\t\topts: createAgent.RequestOptions\n\t) =>\n\t\t| createAgent.AgentCallbackReturn\n\t\t| Promise<createAgent.AgentCallbackReturn>;\n\n\texport type AgentCallback = typeof Agent.prototype.callback;\n\n\texport type AgentOptions = {\n\t\ttimeout?: number;\n\t};\n\n\t/**\n\t * Base `http.Agent` implementation.\n\t * No pooling/keep-alive is implemented by default.\n\t *\n\t * @param {Function} callback\n\t * @api public\n\t */\n\texport class Agent extends EventEmitter {\n\t\tpublic timeout: number | null;\n\t\tpublic maxFreeSockets: number;\n\t\tpublic maxTotalSockets: number;\n\t\tpublic maxSockets: number;\n\t\tpublic sockets: {\n\t\t\t[key: string]: net.Socket[];\n\t\t};\n\t\tpublic freeSockets: {\n\t\t\t[key: string]: net.Socket[];\n\t\t};\n\t\tpublic requests: {\n\t\t\t[key: string]: http.IncomingMessage[];\n\t\t};\n\t\tpublic options: https.AgentOptions;\n\t\tprivate promisifiedCallback?: createAgent.AgentCallbackPromise;\n\t\tprivate explicitDefaultPort?: number;\n\t\tprivate explicitProtocol?: string;\n\n\t\tconstructor(\n\t\t\tcallback?: createAgent.AgentCallback | createAgent.AgentOptions,\n\t\t\t_opts?: createAgent.AgentOptions\n\t\t) {\n\t\t\tsuper();\n\n\t\t\tlet opts = _opts;\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tthis.callback = callback;\n\t\t\t} else if (callback) {\n\t\t\t\topts = callback;\n\t\t\t}\n\n\t\t\t// Timeout for the socket to be returned from the callback\n\t\t\tthis.timeout = null;\n\t\t\tif (opts && typeof opts.timeout === 'number') {\n\t\t\t\tthis.timeout = opts.timeout;\n\t\t\t}\n\n\t\t\t// These aren't actually used by `agent-base`, but are required\n\t\t\t// for the TypeScript definition files in `@types/node` :/\n\t\t\tthis.maxFreeSockets = 1;\n\t\t\tthis.maxSockets = 1;\n\t\t\tthis.maxTotalSockets = Infinity;\n\t\t\tthis.sockets = {};\n\t\t\tthis.freeSockets = {};\n\t\t\tthis.requests = {};\n\t\t\tthis.options = {};\n\t\t}\n\n\t\tget defaultPort(): number {\n\t\t\tif (typeof this.explicitDefaultPort === 'number') {\n\t\t\t\treturn this.explicitDefaultPort;\n\t\t\t}\n\t\t\treturn isSecureEndpoint() ? 443 : 80;\n\t\t}\n\n\t\tset defaultPort(v: number) {\n\t\t\tthis.explicitDefaultPort = v;\n\t\t}\n\n\t\tget protocol(): string {\n\t\t\tif (typeof this.explicitProtocol === 'string') {\n\t\t\t\treturn this.explicitProtocol;\n\t\t\t}\n\t\t\treturn isSecureEndpoint() ? 'https:' : 'http:';\n\t\t}\n\n\t\tset protocol(v: string) {\n\t\t\tthis.explicitProtocol = v;\n\t\t}\n\n\t\tcallback(\n\t\t\treq: createAgent.ClientRequest,\n\t\t\topts: createAgent.RequestOptions,\n\t\t\tfn: createAgent.AgentCallbackCallback\n\t\t): void;\n\t\tcallback(\n\t\t\treq: createAgent.ClientRequest,\n\t\t\topts: createAgent.RequestOptions\n\t\t):\n\t\t\t| createAgent.AgentCallbackReturn\n\t\t\t| Promise<createAgent.AgentCallbackReturn>;\n\t\tcallback(\n\t\t\treq: createAgent.ClientRequest,\n\t\t\topts: createAgent.AgentOptions,\n\t\t\tfn?: createAgent.AgentCallbackCallback\n\t\t):\n\t\t\t| createAgent.AgentCallbackReturn\n\t\t\t| Promise<createAgent.AgentCallbackReturn>\n\t\t\t| void {\n\t\t\tthrow new Error(\n\t\t\t\t'\"agent-base\" has no default implementation, you must subclass and override `callback()`'\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Called by node-core's \"_http_client.js\" module when creating\n\t\t * a new HTTP request with this Agent instance.\n\t\t *\n\t\t * @api public\n\t\t */\n\t\taddRequest(req: ClientRequest, _opts: RequestOptions): void {\n\t\t\tconst opts: RequestOptions = { ..._opts };\n\n\t\t\tif (typeof opts.secureEndpoint !== 'boolean') {\n\t\t\t\topts.secureEndpoint = isSecureEndpoint();\n\t\t\t}\n\n\t\t\tif (opts.host == null) {\n\t\t\t\topts.host = 'localhost';\n\t\t\t}\n\n\t\t\tif (opts.port == null) {\n\t\t\t\topts.port = opts.secureEndpoint ? 443 : 80;\n\t\t\t}\n\n\t\t\tif (opts.protocol == null) {\n\t\t\t\topts.protocol = opts.secureEndpoint ? 'https:' : 'http:';\n\t\t\t}\n\n\t\t\tif (opts.host && opts.path) {\n\t\t\t\t// If both a `host` and `path` are specified then it's most\n\t\t\t\t// likely the result of a `url.parse()` call... we need to\n\t\t\t\t// remove the `path` portion so that `net.connect()` doesn't\n\t\t\t\t// attempt to open that as a unix socket file.\n\t\t\t\tdelete opts.path;\n\t\t\t}\n\n\t\t\tdelete opts.agent;\n\t\t\tdelete opts.hostname;\n\t\t\tdelete opts._defaultAgent;\n\t\t\tdelete opts.defaultPort;\n\t\t\tdelete opts.createConnection;\n\n\t\t\t// Hint to use \"Connection: close\"\n\t\t\t// XXX: non-documented `http` module API :(\n\t\t\treq._last = true;\n\t\t\treq.shouldKeepAlive = false;\n\n\t\t\tlet timedOut = false;\n\t\t\tlet timeoutId: ReturnType<typeof setTimeout> | null = null;\n\t\t\tconst timeoutMs = opts.timeout || this.timeout;\n\n\t\t\tconst onerror = (err: NodeJS.ErrnoException) => {\n\t\t\t\tif (req._hadError) return;\n\t\t\t\treq.emit('error', err);\n\t\t\t\t// For Safety. Some additional errors might fire later on\n\t\t\t\t// and we need to make sure we don't double-fire the error event.\n\t\t\t\treq._hadError = true;\n\t\t\t};\n\n\t\t\tconst ontimeout = () => {\n\t\t\t\ttimeoutId = null;\n\t\t\t\ttimedOut = true;\n\t\t\t\tconst err: NodeJS.ErrnoException = new Error(\n\t\t\t\t\t`A \"socket\" was not created for HTTP request before ${timeoutMs}ms`\n\t\t\t\t);\n\t\t\t\terr.code = 'ETIMEOUT';\n\t\t\t\tonerror(err);\n\t\t\t};\n\n\t\t\tconst callbackError = (err: NodeJS.ErrnoException) => {\n\t\t\t\tif (timedOut) return;\n\t\t\t\tif (timeoutId !== null) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\ttimeoutId = null;\n\t\t\t\t}\n\t\t\t\tonerror(err);\n\t\t\t};\n\n\t\t\tconst onsocket = (socket: AgentCallbackReturn) => {\n\t\t\t\tif (timedOut) return;\n\t\t\t\tif (timeoutId != null) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\ttimeoutId = null;\n\t\t\t\t}\n\n\t\t\t\tif (isAgent(socket)) {\n\t\t\t\t\t// `socket` is actually an `http.Agent` instance, so\n\t\t\t\t\t// relinquish responsibility for this `req` to the Agent\n\t\t\t\t\t// from here on\n\t\t\t\t\tdebug(\n\t\t\t\t\t\t'Callback returned another Agent instance %o',\n\t\t\t\t\t\tsocket.constructor.name\n\t\t\t\t\t);\n\t\t\t\t\t(socket as createAgent.Agent).addRequest(req, opts);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (socket) {\n\t\t\t\t\tsocket.once('free', () => {\n\t\t\t\t\t\tthis.freeSocket(socket as net.Socket, opts);\n\t\t\t\t\t});\n\t\t\t\t\treq.onSocket(socket as net.Socket);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst err = new Error(\n\t\t\t\t\t`no Duplex stream was returned to agent-base for \\`${req.method} ${req.path}\\``\n\t\t\t\t);\n\t\t\t\tonerror(err);\n\t\t\t};\n\n\t\t\tif (typeof this.callback !== 'function') {\n\t\t\t\tonerror(new Error('`callback` is not defined'));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.promisifiedCallback) {\n\t\t\t\tif (this.callback.length >= 3) {\n\t\t\t\t\tdebug('Converting legacy callback function to promise');\n\t\t\t\t\tthis.promisifiedCallback = promisify(this.callback);\n\t\t\t\t} else {\n\t\t\t\t\tthis.promisifiedCallback = this.callback;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof timeoutMs === 'number' && timeoutMs > 0) {\n\t\t\t\ttimeoutId = setTimeout(ontimeout, timeoutMs);\n\t\t\t}\n\n\t\t\tif ('port' in opts && typeof opts.port !== 'number') {\n\t\t\t\topts.port = Number(opts.port);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tdebug(\n\t\t\t\t\t'Resolving socket for %o request: %o',\n\t\t\t\t\topts.protocol,\n\t\t\t\t\t`${req.method} ${req.path}`\n\t\t\t\t);\n\t\t\t\tPromise.resolve(this.promisifiedCallback(req, opts)).then(\n\t\t\t\t\tonsocket,\n\t\t\t\t\tcallbackError\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\tPromise.reject(err).catch(callbackError);\n\t\t\t}\n\t\t}\n\n\t\tfreeSocket(socket: net.Socket, opts: AgentOptions) {\n\t\t\tdebug('Freeing socket %o %o', socket.constructor.name, opts);\n\t\t\tsocket.destroy();\n\t\t}\n\n\t\tdestroy() {\n\t\t\tdebug('Destroying agent %o', this.constructor.name);\n\t\t}\n\t}\n\n\t// So that `instanceof` works correctly\n\tcreateAgent.prototype = createAgent.Agent.prototype;\n}\n\nexport = createAgent;\n", null, null, null, "import { createTransport } from '@sentry/core';\nimport type {\n  BaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequest,\n  TransportRequestExecutor,\n} from '@sentry/types';\nimport * as http from 'http';\nimport * as https from 'https';\nimport { HttpsProxyAgent } from 'https-proxy-agent';\nimport { Readable } from 'stream';\nimport { URL } from 'url';\nimport { createGzip } from 'zlib';\n\nimport type { HTTPModule } from './http-module';\n\nexport interface NodeTransportOptions extends BaseTransportOptions {\n  /** Define custom headers */\n  headers?: Record<string, string>;\n  /** Set a proxy that should be used for outbound requests. */\n  proxy?: string;\n  /** HTTPS proxy CA certificates */\n  caCerts?: string | Buffer | Array<string | Buffer>;\n  /** Custom HTTP module. Defaults to the native 'http' and 'https' modules. */\n  httpModule?: HTTPModule;\n  /** Allow overriding connection keepAlive, defaults to false */\n  keepAlive?: boolean;\n}\n\n// Estimated maximum size for reasonable standalone event\nconst GZIP_THRESHOLD = 1024 * 32;\n\n/**\n * Gets a stream from a Uint8Array or string\n * Readable.from is ideal but was added in node.js v12.3.0 and v10.17.0\n */\nfunction streamFromBody(body: Uint8Array | string): Readable {\n  return new Readable({\n    read() {\n      this.push(body);\n      this.push(null);\n    },\n  });\n}\n\n/**\n * Creates a Transport that uses native the native 'http' and 'https' modules to send events to Sentry.\n */\nexport function makeNodeTransport(options: NodeTransportOptions): Transport {\n  let urlSegments: URL;\n\n  try {\n    urlSegments = new URL(options.url);\n  } catch (e) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      '[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.',\n    );\n    return createTransport(options, () => Promise.resolve({}));\n  }\n\n  const isHttps = urlSegments.protocol === 'https:';\n\n  // Proxy prioritization: http => `options.proxy` | `process.env.http_proxy`\n  // Proxy prioritization: https => `options.proxy` | `process.env.https_proxy` | `process.env.http_proxy`\n  const proxy = applyNoProxyOption(\n    urlSegments,\n    options.proxy || (isHttps ? process.env.https_proxy : undefined) || process.env.http_proxy,\n  );\n\n  const nativeHttpModule = isHttps ? https : http;\n  const keepAlive = options.keepAlive === undefined ? false : options.keepAlive;\n\n  // TODO(v7): Evaluate if we can set keepAlive to true. This would involve testing for memory leaks in older node\n  // versions(>= 8) as they had memory leaks when using it: #2555\n  const agent = proxy\n    ? (new HttpsProxyAgent(proxy) as http.Agent)\n    : new nativeHttpModule.Agent({ keepAlive, maxSockets: 30, timeout: 2000 });\n\n  const requestExecutor = createRequestExecutor(options, options.httpModule ?? nativeHttpModule, agent);\n  return createTransport(options, requestExecutor);\n}\n\n/**\n * Honors the `no_proxy` env variable with the highest priority to allow for hosts exclusion.\n *\n * @param transportUrl The URL the transport intends to send events to.\n * @param proxy The client configured proxy.\n * @returns A proxy the transport should use.\n */\nfunction applyNoProxyOption(transportUrlSegments: URL, proxy: string | undefined): string | undefined {\n  const { no_proxy } = process.env;\n\n  const urlIsExemptFromProxy =\n    no_proxy &&\n    no_proxy\n      .split(',')\n      .some(\n        exemption => transportUrlSegments.host.endsWith(exemption) || transportUrlSegments.hostname.endsWith(exemption),\n      );\n\n  if (urlIsExemptFromProxy) {\n    return undefined;\n  } else {\n    return proxy;\n  }\n}\n\n/**\n * Creates a RequestExecutor to be used with `createTransport`.\n */\nfunction createRequestExecutor(\n  options: NodeTransportOptions,\n  httpModule: HTTPModule,\n  agent: http.Agent,\n): TransportRequestExecutor {\n  const { hostname, pathname, port, protocol, search } = new URL(options.url);\n  return function makeRequest(request: TransportRequest): Promise<TransportMakeRequestResponse> {\n    return new Promise((resolve, reject) => {\n      let body = streamFromBody(request.body);\n\n      const headers: Record<string, string> = { ...options.headers };\n\n      if (request.body.length > GZIP_THRESHOLD) {\n        headers['content-encoding'] = 'gzip';\n        body = body.pipe(createGzip());\n      }\n\n      const req = httpModule.request(\n        {\n          method: 'POST',\n          agent,\n          headers,\n          hostname,\n          path: `${pathname}${search}`,\n          port,\n          protocol,\n          ca: options.caCerts,\n        },\n        res => {\n          res.on('data', () => {\n            // Drain socket\n          });\n\n          res.on('end', () => {\n            // Drain socket\n          });\n\n          res.setEncoding('utf8');\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          const retryAfterHeader = res.headers['retry-after'] ?? null;\n          const rateLimitsHeader = res.headers['x-sentry-rate-limits'] ?? null;\n\n          resolve({\n            statusCode: res.statusCode,\n            headers: {\n              'retry-after': retryAfterHeader,\n              'x-sentry-rate-limits': Array.isArray(rateLimitsHeader) ? rateLimitsHeader[0] : rateLimitsHeader,\n            },\n          });\n        },\n      );\n\n      req.on('error', reject);\n      body.pipe(req);\n    });\n  };\n}\n", "import { parseSemver } from '@sentry/utils';\n\nexport const NODE_VERSION: ReturnType<typeof parseSemver> = parseSemver(process.versions.node);\n", "import type { Carrier, Hub, RunWithAsyncContextOptions } from '@sentry/core';\nimport { ensureHubOnCarrier, getHubFromCarrier, setAsyncContextStrategy, setHubOnCarrier } from '@sentry/core';\nimport * as domain from 'domain';\n\nfunction getActiveDomain<T>(): T | undefined {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n  return (domain as any).active as T | undefined;\n}\n\nfunction getCurrentHub(): Hub | undefined {\n  const activeDomain = getActiveDomain<Carrier>();\n\n  // If there's no active domain, just return undefined and the global hub will be used\n  if (!activeDomain) {\n    return undefined;\n  }\n\n  ensureHubOnCarrier(activeDomain);\n\n  return getHubFromCarrier(activeDomain);\n}\n\nfunction createNewHub(parent: Hub | undefined): Hub {\n  const carrier: Carrier = {};\n  ensureHubOnCarrier(carrier, parent);\n  return getHubFromCarrier(carrier);\n}\n\nfunction runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T {\n  const activeDomain = getActiveDomain<domain.Domain & Carrier>();\n\n  if (activeDomain && options?.reuseExisting) {\n    // We're already in a domain, so we don't need to create a new one, just call the callback with the current hub\n    return callback();\n  }\n\n  const local = domain.create() as domain.Domain & Carrier;\n\n  const parentHub = activeDomain ? getHubFromCarrier(activeDomain) : undefined;\n  const newHub = createNewHub(parentHub);\n  setHubOnCarrier(local, newHub);\n\n  return local.bind(() => {\n    return callback();\n  })();\n}\n\n/**\n * Sets the async context strategy to use Node.js domains.\n */\nexport function setDomainAsyncContextStrategy(): void {\n  setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext });\n}\n", "import type { Carrier, Hub, RunWithAsyncContextOptions } from '@sentry/core';\nimport { ensureHubOnCarrier, getHubFromCarrier, setAsyncContextStrategy } from '@sentry/core';\nimport * as async_hooks from 'async_hooks';\n\ninterface AsyncLocalStorage<T> {\n  getStore(): T | undefined;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  run<R, TArgs extends any[]>(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;\n}\n\ntype AsyncLocalStorageConstructor = { new <T>(): AsyncLocalStorage<T> };\n// AsyncLocalStorage only exists in async_hook after Node v12.17.0 or v13.10.0\ntype NewerAsyncHooks = typeof async_hooks & { AsyncLocalStorage: AsyncLocalStorageConstructor };\n\nlet asyncStorage: AsyncLocalStorage<Hub>;\n\n/**\n * Sets the async context strategy to use AsyncLocalStorage which requires Node v12.17.0 or v13.10.0.\n */\nexport function setHooksAsyncContextStrategy(): void {\n  if (!asyncStorage) {\n    asyncStorage = new (async_hooks as NewerAsyncHooks).AsyncLocalStorage<Hub>();\n  }\n\n  function getCurrentHub(): Hub | undefined {\n    return asyncStorage.getStore();\n  }\n\n  function createNewHub(parent: Hub | undefined): Hub {\n    const carrier: Carrier = {};\n    ensureHubOnCarrier(carrier, parent);\n    return getHubFromCarrier(carrier);\n  }\n\n  function runWithAsyncContext<T>(callback: () => T, options: RunWithAsyncContextOptions): T {\n    const existingHub = getCurrentHub();\n\n    if (existingHub && options?.reuseExisting) {\n      // We're already in an async context, so we don't need to create a new one\n      // just call the callback with the current hub\n      return callback();\n    }\n\n    const newHub = createNewHub(existingHub);\n\n    return asyncStorage.run(newHub, () => {\n      return callback();\n    });\n  }\n\n  setAsyncContextStrategy({ getCurrentHub, runWithAsyncContext });\n}\n", "import { NODE_VERSION } from '../nodeVersion';\nimport { setDomainAsyncContextStrategy } from './domain';\nimport { setHooksAsyncContextStrategy } from './hooks';\n\n/**\n * Sets the correct async context strategy for Node.js\n *\n * Node.js >= 14 uses AsyncLocalStorage\n * Node.js < 14 uses domains\n */\nexport function setNodeAsyncContextStrategy(): void {\n  if (NODE_VERSION.major && NODE_VERSION.major >= 14) {\n    setHooksAsyncContextStrategy();\n  } else {\n    setDomainAsyncContextStrategy();\n  }\n}\n", "import { getCurrentHub } from '@sentry/core';\nimport type { Integration } from '@sentry/types';\nimport { addInstrumentationHandler, severityLevelFromString } 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    addInstrumentationHandler('console', ({ args, level }: { args: unknown[]; level: string }) => {\n      const hub = getCurrentHub();\n\n      if (!hub.getIntegration(Console)) {\n        return;\n      }\n\n      hub.addBreadcrumb(\n        {\n          category: 'console',\n          level: severityLevelFromString(level),\n          message: util.format.apply(undefined, args),\n        },\n        {\n          input: [...args],\n          level,\n        },\n      );\n    });\n  }\n}\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", "import { getCurrentHub } from '@sentry/core';\nimport type * as http from 'http';\nimport type * as https from 'https';\nimport { URL } from 'url';\n\nimport { NODE_VERSION } from '../../nodeVersion';\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().getClient()?.getDsn();\n  return dsn ? url.includes(dsn.host) : false;\n}\n\n/**\n * Assembles a URL that's passed to the users to filter on.\n * It can include raw (potentially PII containing) data, which we'll allow users to access to filter\n * but won't include in spans or breadcrumbs.\n *\n * @param requestOptions RequestOptions object containing the component parts for a URL\n * @returns Fully-formed URL\n */\n// TODO (v8): This function should include auth, query and fragment (it's breaking, so we need to wait for v8)\nexport function extractRawUrl(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  return `${protocol}//${hostname}${port}${path}`;\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  // do not include search or hash in span descriptions, per https://develop.sentry.dev/sdk/data-handling/#structuring-data\n  const path = requestOptions.pathname || '/';\n  // always filter authority, see https://develop.sentry.dev/sdk/data-handling/#structuring-data\n  const authority = requestOptions.auth ? redactAuthority(requestOptions.auth) : '';\n\n  return `${protocol}//${authority}${hostname}${port}${path}`;\n}\n\nfunction redactAuthority(auth: string): string {\n  const [user, password] = auth.split(':');\n  return `${user ? '[Filtered]' : ''}:${password ? '[Filtered]' : ''}@`;\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    // This URL contains the filtered authority ([filtered]:[filtered]@example.com) but no fragment or query params\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  httpModule: typeof http | typeof https,\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  // Figure out the protocol if it's currently missing\n  if (requestOptions.protocol === undefined) {\n    // Worst case we end up populating protocol with undefined, which it already is\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any */\n\n    // NOTE: Prior to Node 9, `https` used internals of `http` module, thus we don't patch it.\n    // Because of that, we cannot rely on `httpModule` to provide us with valid protocol,\n    // as it will always return `http`, even when using `https` module.\n    //\n    // See test/integrations/http.test.ts for more details on Node <=v8 protocol issue.\n    if (NODE_VERSION.major && NODE_VERSION.major > 8) {\n      requestOptions.protocol =\n        (httpModule?.globalAgent as any)?.protocol ||\n        (requestOptions.agent as any)?.protocol ||\n        (requestOptions._defaultAgent as any)?.protocol;\n    } else {\n      requestOptions.protocol =\n        (requestOptions.agent as any)?.protocol ||\n        (requestOptions._defaultAgent as any)?.protocol ||\n        (httpModule?.globalAgent as any)?.protocol;\n    }\n    /* eslint-enable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any */\n  }\n\n  // return args in standardized form\n  if (callback) {\n    return [requestOptions, callback];\n  } else {\n    return [requestOptions];\n  }\n}\n", "import type { Hub } from '@sentry/core';\nimport { getCurrentHub, getDynamicSamplingContextFromClient } from '@sentry/core';\nimport type {\n  DynamicSamplingContext,\n  EventProcessor,\n  Integration,\n  SanitizedRequestData,\n  TracePropagationTargets,\n} from '@sentry/types';\nimport {\n  dynamicSamplingContextToSentryBaggageHeader,\n  fill,\n  generateSentryTraceHeader,\n  logger,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\nimport type * as http from 'http';\nimport type * as https from 'https';\nimport { LRUMap } from 'lru_map';\n\nimport type { NodeClient } from '../client';\nimport { NODE_VERSION } from '../nodeVersion';\nimport type { RequestMethod, RequestMethodArgs, RequestOptions } from './utils/http';\nimport { cleanSpanDescription, extractRawUrl, extractUrl, isSentryRequest, normalizeRequestArgs } from './utils/http';\n\ninterface TracingOptions {\n  /**\n   * List of strings/regex controlling to which outgoing requests\n   * the SDK will attach tracing headers.\n   *\n   * By default the SDK will attach those headers to all outgoing\n   * requests. If this option is provided, the SDK will match the\n   * request URL of outgoing requests against the items in this\n   * array, and only attach tracing headers if a match was found.\n   *\n   * @deprecated Use top level `tracePropagationTargets` option instead.\n   * This option will be removed in v8.\n   *\n   * ```\n   * Sentry.init({\n   *   tracePropagationTargets: ['api.site.com'],\n   * })\n   */\n  tracePropagationTargets?: TracePropagationTargets;\n\n  /**\n   * Function determining whether or not to create spans to track outgoing requests to the given URL.\n   * By default, spans will be created for all outgoing requests.\n   */\n  shouldCreateSpanForRequest?: (url: string) => boolean;\n}\n\ninterface HttpOptions {\n  /**\n   * Whether breadcrumbs should be recorded for requests\n   * Defaults to true\n   */\n  breadcrumbs?: boolean;\n\n  /**\n   * Whether tracing spans should be created for requests\n   * Defaults to false\n   */\n  tracing?: TracingOptions | boolean;\n}\n\n/**\n * The http module integration instruments Node's internal http module. It creates breadcrumbs, transactions for outgoing\n * http requests and attaches trace data when tracing is enabled via its `tracing` option.\n */\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  private readonly _breadcrumbs: boolean;\n  private readonly _tracing: TracingOptions | undefined;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: HttpOptions = {}) {\n    this._breadcrumbs = typeof options.breadcrumbs === 'undefined' ? true : options.breadcrumbs;\n    this._tracing = !options.tracing ? undefined : options.tracing === true ? {} : options.tracing;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(\n    _addGlobalEventProcessor: (callback: EventProcessor) => void,\n    setupOnceGetCurrentHub: () => Hub,\n  ): 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 clientOptions = setupOnceGetCurrentHub().getClient<NodeClient>()?.getOptions();\n\n    // Do not auto-instrument for other instrumenter\n    if (clientOptions && clientOptions.instrumenter !== 'sentry') {\n      __DEBUG_BUILD__ && logger.log('HTTP Integration is skipped because of instrumenter configuration.');\n      return;\n    }\n\n    const shouldCreateSpanForRequest =\n      // eslint-disable-next-line deprecation/deprecation\n      this._tracing?.shouldCreateSpanForRequest || clientOptions?.shouldCreateSpanForRequest;\n    // eslint-disable-next-line deprecation/deprecation\n    const tracePropagationTargets = clientOptions?.tracePropagationTargets || this._tracing?.tracePropagationTargets;\n\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const httpModule = require('http');\n    const wrappedHttpHandlerMaker = _createWrappedRequestMethodFactory(\n      httpModule,\n      this._breadcrumbs,\n      shouldCreateSpanForRequest,\n      tracePropagationTargets,\n    );\n    fill(httpModule, 'get', wrappedHttpHandlerMaker);\n    fill(httpModule, 'request', wrappedHttpHandlerMaker);\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      // eslint-disable-next-line @typescript-eslint/no-var-requires\n      const httpsModule = require('https');\n      const wrappedHttpsHandlerMaker = _createWrappedRequestMethodFactory(\n        httpsModule,\n        this._breadcrumbs,\n        shouldCreateSpanForRequest,\n        tracePropagationTargets,\n      );\n      fill(httpsModule, 'get', wrappedHttpsHandlerMaker);\n      fill(httpsModule, 'request', wrappedHttpsHandlerMaker);\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  httpModule: typeof http | typeof https,\n  breadcrumbsEnabled: boolean,\n  shouldCreateSpanForRequest: ((url: string) => boolean) | undefined,\n  tracePropagationTargets: TracePropagationTargets | undefined,\n): WrappedRequestMethodFactory {\n  // We're caching results so we don't have to recompute regexp every time we create a request.\n  const createSpanUrlMap = new LRUMap<string, boolean>(100);\n  const headersUrlMap = new LRUMap<string, boolean>(100);\n\n  const shouldCreateSpan = (url: string): boolean => {\n    if (shouldCreateSpanForRequest === undefined) {\n      return true;\n    }\n\n    const cachedDecision = createSpanUrlMap.get(url);\n    if (cachedDecision !== undefined) {\n      return cachedDecision;\n    }\n\n    const decision = shouldCreateSpanForRequest(url);\n    createSpanUrlMap.set(url, decision);\n    return decision;\n  };\n\n  const shouldAttachTraceData = (url: string): boolean => {\n    if (tracePropagationTargets === undefined) {\n      return true;\n    }\n\n    const cachedDecision = headersUrlMap.get(url);\n    if (cachedDecision !== undefined) {\n      return cachedDecision;\n    }\n\n    const decision = stringMatchesSomePattern(url, tracePropagationTargets);\n    headersUrlMap.set(url, decision);\n    return decision;\n  };\n\n  /**\n   * Captures Breadcrumb based on provided request/response pair\n   */\n  function addRequestBreadcrumb(\n    event: string,\n    requestSpanData: SanitizedRequestData,\n    req: http.ClientRequest,\n    res?: http.IncomingMessage,\n  ): void {\n    if (!getCurrentHub().getIntegration(Http)) {\n      return;\n    }\n\n    getCurrentHub().addBreadcrumb(\n      {\n        category: 'http',\n        data: {\n          status_code: res && res.statusCode,\n          ...requestSpanData,\n        },\n        type: 'http',\n      },\n      {\n        event,\n        request: req,\n        response: res,\n      },\n    );\n  }\n\n  return function wrappedRequestMethodFactory(originalRequestMethod: OriginalRequestMethod): WrappedRequestMethod {\n    return function wrappedMethod(this: unknown, ...args: RequestMethodArgs): http.ClientRequest {\n      const requestArgs = normalizeRequestArgs(httpModule, args);\n      const requestOptions = requestArgs[0];\n      // eslint-disable-next-line deprecation/deprecation\n      const rawRequestUrl = extractRawUrl(requestOptions);\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      const hub = getCurrentHub();\n      const scope = hub.getScope();\n      const parentSpan = scope.getSpan();\n\n      const data = getRequestSpanData(requestUrl, requestOptions);\n\n      const requestSpan = shouldCreateSpan(rawRequestUrl)\n        ? parentSpan?.startChild({\n            op: 'http.client',\n            origin: 'auto.http.node.http',\n            description: `${data['http.method']} ${data.url}`,\n            data,\n          })\n        : undefined;\n\n      if (shouldAttachTraceData(rawRequestUrl)) {\n        if (requestSpan) {\n          const sentryTraceHeader = requestSpan.toTraceparent();\n          const dynamicSamplingContext = requestSpan?.transaction?.getDynamicSamplingContext();\n          addHeadersToRequestOptions(requestOptions, requestUrl, sentryTraceHeader, dynamicSamplingContext);\n        } else {\n          const client = hub.getClient();\n          const { traceId, sampled, dsc } = scope.getPropagationContext();\n          const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);\n          const dynamicSamplingContext =\n            dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);\n          addHeadersToRequestOptions(requestOptions, requestUrl, sentryTraceHeader, dynamicSamplingContext);\n        }\n      } else {\n        __DEBUG_BUILD__ &&\n          logger.log(\n            `[Tracing] Not adding sentry-trace header to outgoing request (${requestUrl}) due to mismatching tracePropagationTargets option.`,\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', data, req, res);\n          }\n          if (requestSpan) {\n            if (res.statusCode) {\n              requestSpan.setHttpStatus(res.statusCode);\n            }\n            requestSpan.description = cleanSpanDescription(requestSpan.description, requestOptions, req);\n            requestSpan.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', data, req);\n          }\n          if (requestSpan) {\n            requestSpan.setHttpStatus(500);\n            requestSpan.description = cleanSpanDescription(requestSpan.description, requestOptions, req);\n            requestSpan.finish();\n          }\n        });\n    };\n  };\n}\n\nfunction addHeadersToRequestOptions(\n  requestOptions: RequestOptions,\n  requestUrl: string,\n  sentryTraceHeader: string,\n  dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined,\n): void {\n  // Don't overwrite sentry-trace and baggage header if it's already set.\n  const headers = requestOptions.headers || {};\n  if (headers['sentry-trace']) {\n    return;\n  }\n\n  __DEBUG_BUILD__ &&\n    logger.log(`[Tracing] Adding sentry-trace header ${sentryTraceHeader} to outgoing request to \"${requestUrl}\": `);\n  const sentryBaggage = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n  const sentryBaggageHeader =\n    sentryBaggage && sentryBaggage.length > 0 ? normalizeBaggageHeader(requestOptions, sentryBaggage) : undefined;\n\n  requestOptions.headers = {\n    ...requestOptions.headers,\n    'sentry-trace': sentryTraceHeader,\n    // Setting a header to `undefined` will crash in node so we only set the baggage header when it's defined\n    ...(sentryBaggageHeader && { baggage: sentryBaggageHeader }),\n  };\n}\n\nfunction getRequestSpanData(requestUrl: string, requestOptions: RequestOptions): SanitizedRequestData {\n  const method = requestOptions.method || 'GET';\n  const data: SanitizedRequestData = {\n    url: requestUrl,\n    'http.method': method,\n  };\n  if (requestOptions.hash) {\n    // strip leading \"#\"\n    data['http.fragment'] = requestOptions.hash.substring(1);\n  }\n  if (requestOptions.search) {\n    // strip leading \"?\"\n    data['http.query'] = requestOptions.search.substring(1);\n  }\n  return data;\n}\n\nfunction normalizeBaggageHeader(\n  requestOptions: RequestOptions,\n  sentryBaggageHeader: string | undefined,\n): string | string[] | undefined {\n  if (!requestOptions.headers || !requestOptions.headers.baggage) {\n    return sentryBaggageHeader;\n  } else if (!sentryBaggageHeader) {\n    return requestOptions.headers.baggage as string | string[];\n  } else if (Array.isArray(requestOptions.headers.baggage)) {\n    return [...requestOptions.headers.baggage, sentryBaggageHeader];\n  }\n  // Type-cast explanation:\n  // Technically this the following could be of type `(number | string)[]` but for the sake of simplicity\n  // we say this is undefined behaviour, since it would not be baggage spec conform if the user did this.\n  return [requestOptions.headers.baggage, sentryBaggageHeader] as string[];\n}\n", "import { getCurrentHub } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport type { NodeClient } from '../../client';\n\nconst DEFAULT_SHUTDOWN_TIMEOUT = 2000;\n\n/**\n * @hidden\n */\nexport function logAndExitProcess(error: Error): void {\n  // eslint-disable-next-line no-console\n  console.error(error);\n\n  const client = getCurrentHub().getClient<NodeClient>();\n\n  if (client === undefined) {\n    __DEBUG_BUILD__ && logger.warn('No NodeClient was defined, we are exiting the process now.');\n    global.process.exit(1);\n  }\n\n  const options = client.getOptions();\n  const timeout =\n    (options && options.shutdownTimeout && options.shutdownTimeout > 0 && options.shutdownTimeout) ||\n    DEFAULT_SHUTDOWN_TIMEOUT;\n  client.close(timeout).then(\n    (result: boolean) => {\n      if (!result) {\n        __DEBUG_BUILD__ && logger.warn('We reached the timeout for emptying the request buffer, still exiting now!');\n      }\n      global.process.exit(1);\n    },\n    error => {\n      __DEBUG_BUILD__ && logger.error(error);\n    },\n  );\n}\n", "import type { Scope } from '@sentry/core';\nimport { getCurrentHub } from '@sentry/core';\nimport type { Integration } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport type { NodeClient } from '../client';\nimport { logAndExitProcess } from './utils/errorhandling';\n\ntype OnFatalErrorHandler = (firstError: Error, secondError?: Error) => void;\n\ntype TaggedListener = NodeJS.UncaughtExceptionListener & {\n  tag?: string;\n};\n\n// CAREFUL: Please think twice before updating the way _options looks because the Next.js SDK depends on it in `index.server.ts`\ninterface OnUncaughtExceptionOptions {\n  // TODO(v8): Evaluate whether we should switch the default behaviour here.\n  // Also, we can evaluate using https://nodejs.org/api/process.html#event-uncaughtexceptionmonitor per default, and\n  // falling back to current behaviour when that's not available.\n  /**\n   * Controls if the SDK should register a handler to exit the process on uncaught errors:\n   * - `true`: The SDK will exit the process on all uncaught errors.\n   * - `false`: The SDK will only exit the process when there are no other `uncaughtException` handlers attached.\n   *\n   * Default: `true`\n   */\n  exitEvenIfOtherHandlersAreRegistered: boolean;\n\n  /**\n   * This is called when an uncaught error would cause the process to exit.\n   *\n   * @param firstError Uncaught error causing the process to exit\n   * @param secondError Will be set if the handler was called multiple times. This can happen either because\n   * `onFatalError` itself threw, or because an independent error happened somewhere else while `onFatalError`\n   * was running.\n   */\n  onFatalError?(this: void, firstError: Error, secondError?: Error): void;\n}\n\n/** Global Exception 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  // CAREFUL: Please think twice before updating the way _options looks because the Next.js SDK depends on it in `index.server.ts`\n  private readonly _options: OnUncaughtExceptionOptions;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: Partial<OnUncaughtExceptionOptions> = {}) {\n    this._options = {\n      exitEvenIfOtherHandlersAreRegistered: true,\n      ...options,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    global.process.on('uncaughtException', this.handler);\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      let onFatalError: OnFatalErrorHandler = logAndExitProcess;\n      const client = getCurrentHub().getClient<NodeClient>();\n\n      if (this._options.onFatalError) {\n        onFatalError = this._options.onFatalError;\n      } else if (client && client.getOptions().onFatalError) {\n        onFatalError = client.getOptions().onFatalError as OnFatalErrorHandler;\n      }\n\n      // Attaching a listener to `uncaughtException` will prevent the node process from exiting. We generally do not\n      // want to alter this behaviour so we check for other listeners that users may have attached themselves and adjust\n      // exit behaviour of the SDK accordingly:\n      // - If other listeners are attached, do not exit.\n      // - If the only listener attached is ours, exit.\n      const userProvidedListenersCount = (\n        global.process.listeners('uncaughtException') as TaggedListener[]\n      ).reduce<number>((acc, listener) => {\n        if (\n          // There are 3 listeners we ignore:\n          listener.name === 'domainUncaughtExceptionClear' || // as soon as we're using domains this listener is attached by node itself\n          (listener.tag && listener.tag === 'sentry_tracingErrorCallback') || // the handler we register for tracing\n          listener === this.handler // the handler we register in this integration\n        ) {\n          return acc;\n        } else {\n          return acc + 1;\n        }\n      }, 0);\n\n      const processWouldExit = userProvidedListenersCount === 0;\n      const shouldApplyFatalHandlingLogic = this._options.exitEvenIfOtherHandlersAreRegistered || processWouldExit;\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('fatal');\n            hub.captureException(error, {\n              originalException: error,\n              data: { mechanism: { handled: false, type: 'onuncaughtexception' } },\n            });\n            if (!calledFatalError && shouldApplyFatalHandlingLogic) {\n              calledFatalError = true;\n              onFatalError(error);\n            }\n          });\n        } else {\n          if (!calledFatalError && shouldApplyFatalHandlingLogic) {\n            calledFatalError = true;\n            onFatalError(error);\n          }\n        }\n      } else {\n        if (shouldApplyFatalHandlingLogic) {\n          if (calledFatalError) {\n            // we hit an error *after* calling onFatalError - pretty boned at this point, just shut it down\n            __DEBUG_BUILD__ &&\n              logger.warn(\n                'uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown',\n              );\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  }\n}\n", "import type { Scope } from '@sentry/core';\nimport { getCurrentHub } from '@sentry/core';\nimport type { Integration } from '@sentry/types';\nimport { consoleSandbox } from '@sentry/utils';\n\nimport { logAndExitProcess } from './utils/errorhandling';\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  public sendUnhandledPromise(reason: unknown, promise: unknown): void {\n    const hub = getCurrentHub();\n    if (hub.getIntegration(OnUnhandledRejection)) {\n      hub.withScope((scope: Scope) => {\n        scope.setExtra('unhandledPromiseRejection', true);\n        hub.captureException(reason, {\n          originalException: promise,\n          data: { mechanism: { handled: false, type: 'onunhandledrejection' } },\n        });\n      });\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 type { Client, Event, EventHint, Integration } from '@sentry/types';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\n\nimport { exceptionFromError } from '../eventkhulnasoft';\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  /** @inheritdoc */\n  public setupOnce(): void {\n    // noop\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public preprocessEvent(event: Event, hint: EventHint | undefined, client: Client): void {\n    const options = client.getOptions();\n\n    applyAggregateErrorsToEvent(\n      exceptionFromError,\n      options.stackParser,\n      options.maxValueLength,\n      this._key,\n      this._limit,\n      event,\n      hint,\n    );\n  }\n}\n", "import type { 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: {\n          ...event.modules,\n          ...this._getModules(),\n        },\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", "import type { Event, EventProcessor, Hub, Integration, StackFrame } from '@sentry/types';\nimport { addContextToFrame } from '@sentry/utils';\nimport { readFile } from 'fs';\nimport { LRUMap } from 'lru_map';\n\nconst FILE_CONTENT_CACHE = new LRUMap<string, string[] | null>(100);\nconst DEFAULT_LINES_OF_CONTEXT = 7;\n\n// TODO: Replace with promisify when minimum supported node >= v8\nfunction readTextFileAsync(path: string): Promise<string> {\n  return new Promise((resolve, reject) => {\n    readFile(path, 'utf8', (err, data) => {\n      if (err) reject(err);\n      else resolve(data);\n    });\n  });\n}\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\ninterface ContextLinesOptions {\n  /**\n   * Sets the number of context lines for each frame when loading a file.\n   * Defaults to 7.\n   *\n   * Set to 0 to disable loading and inclusion of source files.\n   **/\n  frameContextLines?: number;\n}\n\n/** Add node modules / packages to the event */\nexport class ContextLines implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'ContextLines';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = ContextLines.id;\n\n  public constructor(private readonly _options: ContextLinesOptions = {}) {}\n\n  /** Get's the number of context lines to add */\n  private get _contextLines(): number {\n    return this._options.frameContextLines !== undefined ? this._options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    addGlobalEventProcessor(event => {\n      const self = getCurrentHub().getIntegration(ContextLines);\n      if (!self) {\n        return event;\n      }\n      return this.addSourceContext(event);\n    });\n  }\n\n  /** Processes an event and adds context lines */\n  public async addSourceContext(event: Event): Promise<Event> {\n    // keep a lookup map of which files we've already enqueued to read,\n    // so we don't enqueue the same file multiple times which would cause multiple i/o reads\n    const enqueuedReadSourceFileTasks: Record<string, number> = {};\n    const readSourceFileTasks: Promise<string[] | null>[] = [];\n\n    if (this._contextLines > 0 && event.exception?.values) {\n      for (const exception of event.exception.values) {\n        if (!exception.stacktrace?.frames) {\n          continue;\n        }\n\n        // We want to iterate in reverse order as calling cache.get will bump the file in our LRU cache.\n        // This ends up prioritizes source context for frames at the top of the stack instead of the bottom.\n        for (let i = exception.stacktrace.frames.length - 1; i >= 0; i--) {\n          const frame = exception.stacktrace.frames[i];\n          // Call cache.get to bump the file to the top of the cache and ensure we have not already\n          // enqueued a read operation for this filename\n          if (\n            frame.filename &&\n            !enqueuedReadSourceFileTasks[frame.filename] &&\n            !FILE_CONTENT_CACHE.get(frame.filename)\n          ) {\n            readSourceFileTasks.push(_readSourceFile(frame.filename));\n            enqueuedReadSourceFileTasks[frame.filename] = 1;\n          }\n        }\n      }\n    }\n\n    // check if files to read > 0, if so, await all of them to be read before adding source contexts.\n    // Normally, Promise.all here could be short circuited if one of the promises rejects, but we\n    // are guarding from that by wrapping the i/o read operation in a try/catch.\n    if (readSourceFileTasks.length > 0) {\n      await Promise.all(readSourceFileTasks);\n    }\n\n    // Perform the same loop as above, but this time we can assume all files are in the cache\n    // and attempt to add source context to frames.\n    if (this._contextLines > 0 && event.exception?.values) {\n      for (const exception of event.exception.values) {\n        if (exception.stacktrace && exception.stacktrace.frames) {\n          await this.addSourceContextToFrames(exception.stacktrace.frames);\n        }\n      }\n    }\n\n    return event;\n  }\n\n  /** Adds context lines to frames */\n  public addSourceContextToFrames(frames: StackFrame[]): void {\n    for (const frame of frames) {\n      // Only add context if we have a filename and it hasn't already been added\n      if (frame.filename && frame.context_line === undefined) {\n        const sourceFileLines = FILE_CONTENT_CACHE.get(frame.filename);\n\n        if (sourceFileLines) {\n          try {\n            addContextToFrame(sourceFileLines, frame, this._contextLines);\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      }\n    }\n  }\n}\n\n/**\n * Reads file contents and caches them in a global LRU cache.\n * If reading fails, mark the file as null in the cache so we don't try again.\n *\n * @param filename filepath to read content from.\n */\nasync function _readSourceFile(filename: string): Promise<string[] | null> {\n  const cachedFile = FILE_CONTENT_CACHE.get(filename);\n\n  // We have already attempted to read this file and failed, do not try again\n  if (cachedFile === null) {\n    return null;\n  }\n\n  // We have a cache hit, return it\n  if (cachedFile !== undefined) {\n    return cachedFile;\n  }\n\n  // Guard from throwing if readFile fails, this enables us to use Promise.all and\n  // not have it short circuiting if one of the promises rejects + since context lines are added\n  // on a best effort basis, we want to throw here anyways.\n\n  // If we made it to here, it means that our file is not cache nor marked as failed, so attempt to read it\n  let content: string[] | null = null;\n  try {\n    const rawFileContents = await readTextFileAsync(filename);\n    content = rawFileContents.split('\\n');\n  } catch (_) {\n    // if we fail, we will mark the file as null in the cache and short circuit next time we try to read it\n  }\n\n  FILE_CONTENT_CACHE.set(filename, content);\n  return content;\n}\n", "/* eslint-disable max-lines */\nimport type {\n  AppContext,\n  CloudResourceContext,\n  Contexts,\n  CultureContext,\n  DeviceContext,\n  Event,\n  EventProcessor,\n  Integration,\n  OsContext,\n} from '@sentry/types';\nimport { execFile } from 'child_process';\nimport { readdir, readFile } from 'fs';\nimport * as os from 'os';\nimport { join } from 'path';\nimport { promisify } from 'util';\n\n// TODO: Required until we drop support for Node v8\nexport const readFileAsync = promisify(readFile);\nexport const readDirAsync = promisify(readdir);\n\ninterface DeviceContextOptions {\n  cpu?: boolean;\n  memory?: boolean;\n}\n\ninterface ContextOptions {\n  app?: boolean;\n  os?: boolean;\n  device?: DeviceContextOptions | boolean;\n  culture?: boolean;\n  cloudResource?: boolean;\n}\n\n/** Add node modules / packages to the event */\nexport class Context implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Context';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = Context.id;\n\n  /**\n   * Caches context so it's only evaluated once\n   */\n  private _cachedContext: Promise<Contexts> | undefined;\n\n  public constructor(\n    private readonly _options: ContextOptions = {\n      app: true,\n      os: true,\n      device: true,\n      culture: true,\n      cloudResource: true,\n    },\n  ) {}\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void): void {\n    addGlobalEventProcessor(event => this.addContext(event));\n  }\n\n  /** Processes an event and adds context */\n  public async addContext(event: Event): Promise<Event> {\n    if (this._cachedContext === undefined) {\n      this._cachedContext = this._getContexts();\n    }\n\n    const updatedContext = this._updateContext(await this._cachedContext);\n\n    event.contexts = {\n      ...event.contexts,\n      app: { ...updatedContext.app, ...event.contexts?.app },\n      os: { ...updatedContext.os, ...event.contexts?.os },\n      device: { ...updatedContext.device, ...event.contexts?.device },\n      culture: { ...updatedContext.culture, ...event.contexts?.culture },\n      cloud_resource: { ...updatedContext.cloud_resource, ...event.contexts?.cloud_resource },\n    };\n\n    return event;\n  }\n\n  /**\n   * Updates the context with dynamic values that can change\n   */\n  private _updateContext(contexts: Contexts): Contexts {\n    // Only update properties if they exist\n    if (contexts?.app?.app_memory) {\n      contexts.app.app_memory = process.memoryUsage().rss;\n    }\n\n    if (contexts?.device?.free_memory) {\n      contexts.device.free_memory = os.freemem();\n    }\n\n    return contexts;\n  }\n\n  /**\n   * Gets the contexts for the current environment\n   */\n  private async _getContexts(): Promise<Contexts> {\n    const contexts: Contexts = {};\n\n    if (this._options.os) {\n      contexts.os = await getOsContext();\n    }\n\n    if (this._options.app) {\n      contexts.app = getAppContext();\n    }\n\n    if (this._options.device) {\n      contexts.device = getDeviceContext(this._options.device);\n    }\n\n    if (this._options.culture) {\n      const culture = getCultureContext();\n\n      if (culture) {\n        contexts.culture = culture;\n      }\n    }\n\n    if (this._options.cloudResource) {\n      contexts.cloud_resource = getCloudResourceContext();\n    }\n\n    return contexts;\n  }\n}\n\n/**\n * Returns the operating system context.\n *\n * Based on the current platform, this uses a different strategy to provide the\n * most accurate OS information. Since this might involve spawning subprocesses\n * or accessing the file system, this should only be executed lazily and cached.\n *\n *  - On macOS (Darwin), this will execute the `sw_vers` utility. The context\n *    has a `name`, `version`, `build` and `kernel_version` set.\n *  - On Linux, this will try to load a distribution release from `/etc` and set\n *    the `name`, `version` and `kernel_version` fields.\n *  - On all other platforms, only a `name` and `version` will be returned. Note\n *    that `version` might actually be the kernel version.\n */\nasync function getOsContext(): Promise<OsContext> {\n  const platformId = os.platform();\n  switch (platformId) {\n    case 'darwin':\n      return getDarwinInfo();\n    case 'linux':\n      return getLinuxInfo();\n    default:\n      return {\n        name: PLATFORM_NAMES[platformId] || platformId,\n        version: os.release(),\n      };\n  }\n}\n\nfunction getCultureContext(): CultureContext | undefined {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    if (typeof (process.versions as unknown as any).icu !== 'string') {\n      // Node was built without ICU support\n      return;\n    }\n\n    // Check that node was built with full Intl support. Its possible it was built without support for non-English\n    // locales which will make resolvedOptions inaccurate\n    //\n    // https://nodejs.org/api/intl.html#detecting-internationalization-support\n    const january = new Date(9e8);\n    const spanish = new Intl.DateTimeFormat('es', { month: 'long' });\n    if (spanish.format(january) === 'enero') {\n      const options = Intl.DateTimeFormat().resolvedOptions();\n\n      return {\n        locale: options.locale,\n        timezone: options.timeZone,\n      };\n    }\n  } catch (err) {\n    //\n  }\n\n  return;\n}\n\nfunction getAppContext(): AppContext {\n  const app_memory = process.memoryUsage().rss;\n  const app_start_time = new Date(Date.now() - process.uptime() * 1000).toISOString();\n\n  return { app_start_time, app_memory };\n}\n\n/**\n * Gets device information from os\n */\nexport function getDeviceContext(deviceOpt: DeviceContextOptions | true): DeviceContext {\n  const device: DeviceContext = {};\n\n  // Sometimes os.uptime() throws due to lacking permissions: https://github.com/getsentry/sentry-javascript/issues/8202\n  let uptime;\n  try {\n    uptime = os.uptime && os.uptime();\n  } catch (e) {\n    // noop\n  }\n\n  // os.uptime or its return value seem to be undefined in certain environments (e.g. Azure functions).\n  // Hence, we only set boot time, if we get a valid uptime value.\n  // @see https://github.com/getsentry/sentry-javascript/issues/5856\n  if (typeof uptime === 'number') {\n    device.boot_time = new Date(Date.now() - uptime * 1000).toISOString();\n  }\n\n  device.arch = os.arch();\n\n  if (deviceOpt === true || deviceOpt.memory) {\n    device.memory_size = os.totalmem();\n    device.free_memory = os.freemem();\n  }\n\n  if (deviceOpt === true || deviceOpt.cpu) {\n    const cpuInfo: os.CpuInfo[] | undefined = os.cpus();\n    if (cpuInfo && cpuInfo.length) {\n      const firstCpu = cpuInfo[0];\n\n      device.processor_count = cpuInfo.length;\n      device.cpu_description = firstCpu.model;\n      device.processor_frequency = firstCpu.speed;\n    }\n  }\n\n  return device;\n}\n\n/** Mapping of Node's platform names to actual OS names. */\nconst PLATFORM_NAMES: { [platform: string]: string } = {\n  aix: 'IBM AIX',\n  freebsd: 'FreeBSD',\n  openbsd: 'OpenBSD',\n  sunos: 'SunOS',\n  win32: 'Windows',\n};\n\n/** Linux version file to check for a distribution. */\ninterface DistroFile {\n  /** The file name, located in `/etc`. */\n  name: string;\n  /** Potential distributions to check. */\n  distros: string[];\n}\n\n/** Mapping of linux release files located in /etc to distributions. */\nconst LINUX_DISTROS: DistroFile[] = [\n  { name: 'fedora-release', distros: ['Fedora'] },\n  { name: 'redhat-release', distros: ['Red Hat Linux', 'Centos'] },\n  { name: 'redhat_version', distros: ['Red Hat Linux'] },\n  { name: 'SuSE-release', distros: ['SUSE Linux'] },\n  { name: 'lsb-release', distros: ['Ubuntu Linux', 'Arch Linux'] },\n  { name: 'debian_version', distros: ['Debian'] },\n  { name: 'debian_release', distros: ['Debian'] },\n  { name: 'arch-release', distros: ['Arch Linux'] },\n  { name: 'gentoo-release', distros: ['Gentoo Linux'] },\n  { name: 'novell-release', distros: ['SUSE Linux'] },\n  { name: 'alpine-release', distros: ['Alpine Linux'] },\n];\n\n/** Functions to extract the OS version from Linux release files. */\nconst LINUX_VERSIONS: {\n  [identifier: string]: (content: string) => string | undefined;\n} = {\n  alpine: content => content,\n  arch: content => matchFirst(/distrib_release=(.*)/, content),\n  centos: content => matchFirst(/release ([^ ]+)/, content),\n  debian: content => content,\n  fedora: content => matchFirst(/release (..)/, content),\n  mint: content => matchFirst(/distrib_release=(.*)/, content),\n  red: content => matchFirst(/release ([^ ]+)/, content),\n  suse: content => matchFirst(/VERSION = (.*)\\n/, content),\n  ubuntu: content => matchFirst(/distrib_release=(.*)/, content),\n};\n\n/**\n * Executes a regular expression with one capture group.\n *\n * @param regex A regular expression to execute.\n * @param text Content to execute the RegEx on.\n * @returns The captured string if matched; otherwise undefined.\n */\nfunction matchFirst(regex: RegExp, text: string): string | undefined {\n  const match = regex.exec(text);\n  return match ? match[1] : undefined;\n}\n\n/** Loads the macOS operating system context. */\nasync function getDarwinInfo(): Promise<OsContext> {\n  // Default values that will be used in case no operating system information\n  // can be loaded. The default version is computed via heuristics from the\n  // kernel version, but the build ID is missing.\n  const darwinInfo: OsContext = {\n    kernel_version: os.release(),\n    name: 'Mac OS X',\n    version: `10.${Number(os.release().split('.')[0]) - 4}`,\n  };\n\n  try {\n    // We try to load the actual macOS version by executing the `sw_vers` tool.\n    // This tool should be available on every standard macOS installation. In\n    // case this fails, we stick with the values computed above.\n\n    const output = await new Promise<string>((resolve, reject) => {\n      execFile('/usr/bin/sw_vers', (error: Error | null, stdout: string) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        resolve(stdout);\n      });\n    });\n\n    darwinInfo.name = matchFirst(/^ProductName:\\s+(.*)$/m, output);\n    darwinInfo.version = matchFirst(/^ProductVersion:\\s+(.*)$/m, output);\n    darwinInfo.build = matchFirst(/^BuildVersion:\\s+(.*)$/m, output);\n  } catch (e) {\n    // ignore\n  }\n\n  return darwinInfo;\n}\n\n/** Returns a distribution identifier to look up version callbacks. */\nfunction getLinuxDistroId(name: string): string {\n  return name.split(' ')[0].toLowerCase();\n}\n\n/** Loads the Linux operating system context. */\nasync function getLinuxInfo(): Promise<OsContext> {\n  // By default, we cannot assume anything about the distribution or Linux\n  // version. `os.release()` returns the kernel version and we assume a generic\n  // \"Linux\" name, which will be replaced down below.\n  const linuxInfo: OsContext = {\n    kernel_version: os.release(),\n    name: 'Linux',\n  };\n\n  try {\n    // We start guessing the distribution by listing files in the /etc\n    // directory. This is were most Linux distributions (except Knoppix) store\n    // release files with certain distribution-dependent meta data. We search\n    // for exactly one known file defined in `LINUX_DISTROS` and exit if none\n    // are found. In case there are more than one file, we just stick with the\n    // first one.\n    const etcFiles = await readDirAsync('/etc');\n    const distroFile = LINUX_DISTROS.find(file => etcFiles.includes(file.name));\n    if (!distroFile) {\n      return linuxInfo;\n    }\n\n    // Once that file is known, load its contents. To make searching in those\n    // files easier, we lowercase the file contents. Since these files are\n    // usually quite small, this should not allocate too much memory and we only\n    // hold on to it for a very short amount of time.\n    const distroPath = join('/etc', distroFile.name);\n    const contents = ((await readFileAsync(distroPath, { encoding: 'utf-8' })) as string).toLowerCase();\n\n    // Some Linux distributions store their release information in the same file\n    // (e.g. RHEL and Centos). In those cases, we scan the file for an\n    // identifier, that basically consists of the first word of the linux\n    // distribution name (e.g. \"red\" for Red Hat). In case there is no match, we\n    // just assume the first distribution in our list.\n    const { distros } = distroFile;\n    linuxInfo.name = distros.find(d => contents.indexOf(getLinuxDistroId(d)) >= 0) || distros[0];\n\n    // Based on the found distribution, we can now compute the actual version\n    // number. This is different for every distribution, so several strategies\n    // are computed in `LINUX_VERSIONS`.\n    const id = getLinuxDistroId(linuxInfo.name);\n    linuxInfo.version = LINUX_VERSIONS[id](contents);\n  } catch (e) {\n    // ignore\n  }\n\n  return linuxInfo;\n}\n\n/**\n * Grabs some information about hosting provider based on best effort.\n */\nfunction getCloudResourceContext(): CloudResourceContext | undefined {\n  if (process.env.VERCEL) {\n    // https://vercel.com/docs/concepts/projects/environment-variables/system-environment-variables#system-environment-variables\n    return {\n      'cloud.provider': 'vercel',\n      'cloud.region': process.env.VERCEL_REGION,\n    };\n  } else if (process.env.AWS_REGION) {\n    // https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html\n    return {\n      'cloud.provider': 'aws',\n      'cloud.region': process.env.AWS_REGION,\n      'cloud.platform': process.env.AWS_EXECUTION_ENV,\n    };\n  } else if (process.env.GCP_PROJECT) {\n    // https://cloud.google.com/composer/docs/how-to/managing/environment-variables#reserved_variables\n    return {\n      'cloud.provider': 'gcp',\n    };\n  } else if (process.env.ALIYUN_REGION_ID) {\n    // TODO: find where I found these environment variables - at least gc.github.com returns something\n    return {\n      'cloud.provider': 'alibaba_cloud',\n      'cloud.region': process.env.ALIYUN_REGION_ID,\n    };\n  } else if (process.env.WEBSITE_SITE_NAME && process.env.REGION_NAME) {\n    // https://learn.microsoft.com/en-us/azure/app-service/reference-app-settings?tabs=kudu%2Cdotnet#app-environment\n    return {\n      'cloud.provider': 'azure',\n      'cloud.region': process.env.REGION_NAME,\n    };\n  } else if (process.env.IBM_CLOUD_REGION) {\n    // TODO: find where I found these environment variables - at least gc.github.com returns something\n    return {\n      'cloud.provider': 'ibm_cloud',\n      'cloud.region': process.env.IBM_CLOUD_REGION,\n    };\n  } else if (process.env.TENCENTCLOUD_REGION) {\n    // https://www.tencentcloud.com/document/product/583/32748\n    return {\n      'cloud.provider': 'tencent_cloud',\n      'cloud.region': process.env.TENCENTCLOUD_REGION,\n      'cloud.account.id': process.env.TENCENTCLOUD_APPID,\n      'cloud.availability_zone': process.env.TENCENTCLOUD_ZONE,\n    };\n  } else if (process.env.NETLIFY) {\n    // https://docs.netlify.com/configure-builds/environment-variables/#read-only-variables\n    return {\n      'cloud.provider': 'netlify',\n    };\n  } else if (process.env.FLY_REGION) {\n    // https://fly.io/docs/reference/runtime-environment/\n    return {\n      'cloud.provider': 'fly.io',\n      'cloud.region': process.env.FLY_REGION,\n    };\n  } else if (process.env.DYNO) {\n    // https://devcenter.heroku.com/articles/dynos#local-environment-variables\n    return {\n      'cloud.provider': 'heroku',\n    };\n  } else {\n    return undefined;\n  }\n}\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar decode = decodeURIComponent;\nvar encode = encodeURIComponent;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar   = VCHAR / obs-text\n * obs-text      = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {}\n  var opt = options || {};\n  var pairs = str.split(';')\n  var dec = opt.decode || decode;\n\n  for (var i = 0; i < pairs.length; i++) {\n    var pair = pairs[i];\n    var index = pair.indexOf('=')\n\n    // skip things that don't look like key=value\n    if (index < 0) {\n      continue;\n    }\n\n    var key = pair.substring(0, index).trim()\n\n    // only assign once\n    if (undefined == obj[key]) {\n      var val = pair.substring(index + 1, pair.length).trim()\n\n      // quoted values\n      if (val[0] === '\"') {\n        val = val.slice(1, -1)\n      }\n\n      obj[key] = tryDecode(val, dec);\n    }\n  }\n\n  return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n  var opt = options || {};\n  var enc = opt.encode || encode;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (value && !fieldContentRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n\n  if (null != opt.maxAge) {\n    var maxAge = opt.maxAge - 0;\n\n    if (isNaN(maxAge) || !isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + Math.floor(maxAge);\n  }\n\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    if (typeof opt.expires.toUTCString !== 'function') {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + opt.expires.toUTCString();\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n", "import type {\n  Event,\n  ExtractedNodeRequestData,\n  PolymorphicRequest,\n  Transaction,\n  TransactionSource,\n} from '@sentry/types';\nimport { isPlainObject, isString, normalize, stripUrlQueryAndFragment } from '@sentry/utils';\nimport * as cookie from 'cookie';\nimport * as url from 'url';\n\nconst DEFAULT_INCLUDES = {\n  ip: false,\n  request: true,\n  transaction: true,\n  user: true,\n};\nconst DEFAULT_REQUEST_INCLUDES = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'];\nexport const DEFAULT_USER_INCLUDES = ['id', 'username', 'email'];\n\n/**\n * Options deciding what parts of the request to use when enhancing an event\n */\nexport type AddRequestDataToEventOptions = {\n  /** Flags controlling whether each type of data should be added to the event */\n  include?: {\n    ip?: boolean;\n    request?: boolean | Array<(typeof DEFAULT_REQUEST_INCLUDES)[number]>;\n    transaction?: boolean | TransactionNamingScheme;\n    user?: boolean | Array<(typeof DEFAULT_USER_INCLUDES)[number]>;\n  };\n};\n\nexport type TransactionNamingScheme = 'path' | 'methodPath' | 'handler';\n\n/**\n * Sets parameterized route as transaction name e.g.: `GET /users/:id`\n * Also adds more context data on the transaction from the request\n */\nexport function addRequestDataToTransaction(transaction: Transaction | undefined, req: PolymorphicRequest): void {\n  if (!transaction) return;\n  if (!transaction.metadata.source || transaction.metadata.source === 'url') {\n    // Attempt to grab a parameterized route off of the request\n    transaction.setName(...extractPathForTransaction(req, { path: true, method: true }));\n  }\n  transaction.setData('url', req.originalUrl || req.url);\n  if (req.baseUrl) {\n    transaction.setData('baseUrl', req.baseUrl);\n  }\n  transaction.setData('query', extractQueryParams(req));\n}\n\n/**\n * Extracts a complete and parameterized path from the request object and uses it to construct transaction name.\n * If the parameterized transaction name cannot be extracted, we fall back to the raw URL.\n *\n * Additionally, this function determines and returns the transaction name source\n *\n * eg. GET /mountpoint/user/:id\n *\n * @param req A request object\n * @param options What to include in the transaction name (method, path, or a custom route name to be\n *                used instead of the request's route)\n *\n * @returns A tuple of the fully constructed transaction name [0] and its source [1] (can be either 'route' or 'url')\n */\nexport function extractPathForTransaction(\n  req: PolymorphicRequest,\n  options: { path?: boolean; method?: boolean; customRoute?: string } = {},\n): [string, TransactionSource] {\n  const method = req.method && req.method.toUpperCase();\n\n  let path = '';\n  let source: TransactionSource = 'url';\n\n  // Check to see if there's a parameterized route we can use (as there is in Express)\n  if (options.customRoute || req.route) {\n    path = options.customRoute || `${req.baseUrl || ''}${req.route && req.route.path}`;\n    source = 'route';\n  }\n\n  // Otherwise, just take the original URL\n  else if (req.originalUrl || req.url) {\n    path = stripUrlQueryAndFragment(req.originalUrl || req.url || '');\n  }\n\n  let name = '';\n  if (options.method && method) {\n    name += method;\n  }\n  if (options.method && options.path) {\n    name += ' ';\n  }\n  if (options.path && path) {\n    name += path;\n  }\n\n  return [name, source];\n}\n\n/** JSDoc */\nfunction extractTransaction(req: PolymorphicRequest, type: boolean | TransactionNamingScheme): string {\n  switch (type) {\n    case 'path': {\n      return extractPathForTransaction(req, { path: true })[0];\n    }\n    case 'handler': {\n      return (req.route && req.route.stack && req.route.stack[0] && req.route.stack[0].name) || '<anonymous>';\n    }\n    case 'methodPath':\n    default: {\n      return extractPathForTransaction(req, { path: true, method: true })[0];\n    }\n  }\n}\n\n/** JSDoc */\nfunction extractUserData(\n  user: {\n    [key: string]: unknown;\n  },\n  keys: boolean | string[],\n): { [key: string]: unknown } {\n  const extractedUser: { [key: string]: unknown } = {};\n  const attributes = Array.isArray(keys) ? keys : DEFAULT_USER_INCLUDES;\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 * Normalize data from the request object\n *\n * @param req The request object from which to extract data\n * @param options.include An optional array of keys to include in the normalized data. Defaults to\n * DEFAULT_REQUEST_INCLUDES if not provided.\n * @param options.deps Injected, platform-specific dependencies\n *\n * @returns An object containing normalized request data\n */\nexport function extractRequestData(\n  req: PolymorphicRequest,\n  options?: {\n    include?: string[];\n  },\n): ExtractedNodeRequestData {\n  const { include = DEFAULT_REQUEST_INCLUDES } = options || {};\n  const requestData: { [key: string]: unknown } = {};\n\n  // headers:\n  //   node, express, koa, nextjs: req.headers\n  const headers = (req.headers || {}) as {\n    host?: string;\n    cookie?: string;\n  };\n  // method:\n  //   node, express, koa, nextjs: 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, nextjs: req.headers.host\n  const host = req.hostname || req.host || headers.host || '<no host>';\n  // protocol:\n  //   node, nextjs: <n/a>\n  //   express, koa: req.protocol\n  const protocol = req.protocol === 'https' || (req.socket && req.socket.encrypted) ? 'https' : 'http';\n  // url (including path and query string):\n  //   node, express: req.originalUrl\n  //   koa, nextjs: req.url\n  const originalUrl = req.originalUrl || req.url || '';\n  // absolute url\n  const absoluteUrl = originalUrl.startsWith(protocol) ? originalUrl : `${protocol}://${host}${originalUrl}`;\n  include.forEach(key => {\n    switch (key) {\n      case 'headers': {\n        requestData.headers = headers;\n\n        // Remove the Cookie header in case cookie data should not be included in the event\n        if (!include.includes('cookies')) {\n          delete (requestData.headers as { cookie?: string }).cookie;\n        }\n\n        break;\n      }\n      case 'method': {\n        requestData.method = method;\n        break;\n      }\n      case 'url': {\n        requestData.url = absoluteUrl;\n        break;\n      }\n      case 'cookies': {\n        // cookies:\n        //   node, express, koa: req.headers.cookie\n        //   vercel, sails.js, express (w/ cookie middleware), nextjs: req.cookies\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        requestData.cookies =\n          // TODO (v8 / #5257): We're only sending the empty object for backwards compatibility, so the last bit can\n          // come off in v8\n          req.cookies || (headers.cookie && cookie.parse(headers.cookie)) || {};\n        break;\n      }\n      case 'query_string': {\n        // query string:\n        //   node: req.url (raw)\n        //   express, koa, nextjs: req.query\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        requestData.query_string = extractQueryParams(req);\n        break;\n      }\n      case 'data': {\n        if (method === 'GET' || method === 'HEAD') {\n          break;\n        }\n        // body data:\n        //   express, koa, nextjs: req.body\n        //\n        //   when using node by itself, you have to read the incoming stream(see\n        //   https://nodejs.dev/learn/get-http-request-body-data-using-nodejs); if a user is doing that, we can't know\n        //   where they're going to store the final result, so they'll have to capture this data themselves\n        if (req.body !== undefined) {\n          requestData.data = isString(req.body) ? req.body : JSON.stringify(normalize(req.body));\n        }\n        break;\n      }\n      default: {\n        if ({}.hasOwnProperty.call(req, key)) {\n          requestData[key] = (req as { [key: string]: unknown })[key];\n        }\n      }\n    }\n  });\n\n  return requestData;\n}\n\n/**\n * Add data from the given request to the given event\n *\n * @param event The event to which the request data will be added\n * @param req Request object\n * @param options.include Flags to control what data is included\n *\n * @returns The mutated `Event` object\n */\nexport function addRequestDataToEvent(\n  event: Event,\n  req: PolymorphicRequest,\n  options?: AddRequestDataToEventOptions,\n): Event {\n  const include = {\n    ...DEFAULT_INCLUDES,\n    ...options?.include,\n  };\n\n  if (include.request) {\n    const extractedRequestData = Array.isArray(include.request)\n      ? extractRequestData(req, { include: include.request })\n      : extractRequestData(req);\n\n    event.request = {\n      ...event.request,\n      ...extractedRequestData,\n    };\n  }\n\n  if (include.user) {\n    const extractedUser = req.user && isPlainObject(req.user) ? extractUserData(req.user, include.user) : {};\n\n    if (Object.keys(extractedUser).length) {\n      event.user = {\n        ...event.user,\n        ...extractedUser,\n      };\n    }\n  }\n\n  // client ip:\n  //   node, nextjs: req.socket.remoteAddress\n  //   express, koa: req.ip\n  if (include.ip) {\n    const ip = req.ip || (req.socket && req.socket.remoteAddress);\n    if (ip) {\n      event.user = {\n        ...event.user,\n        ip_address: ip,\n      };\n    }\n  }\n\n  if (include.transaction && !event.transaction) {\n    // TODO do we even need this anymore?\n    // TODO make this work for nextjs\n    event.transaction = extractTransaction(req, include.transaction);\n  }\n\n  return event;\n}\n\nfunction extractQueryParams(req: PolymorphicRequest): string | Record<string, unknown> | undefined {\n  // url (including path and query string):\n  //   node, express: req.originalUrl\n  //   koa, nextjs: req.url\n  let originalUrl = req.originalUrl || req.url || '';\n\n  if (!originalUrl) {\n    return;\n  }\n\n  // The `URL` constructor can't handle internal URLs of the form `/some/path/here`, so stick a dummy protocol and\n  // hostname on the beginning. Since the point here is just to grab the query string, it doesn't matter what we use.\n  if (originalUrl.startsWith('/')) {\n    originalUrl = `http://dogs.are.great${originalUrl}`;\n  }\n\n  return (\n    req.query ||\n    (typeof URL !== undefined && new URL(originalUrl).search.replace('?', '')) ||\n    // In Node 8, `URL` isn't in the global scope, so we have to use the built-in module from Node\n    url.parse(originalUrl).query ||\n    undefined\n  );\n}\n", "// TODO (v8 or v9): Whenever this becomes a default integration for `@sentry/browser`, move this to `@sentry/core`. For\n// now, we leave it in `@sentry/integrations` so that it doesn't contribute bytes to our CDN bundles.\n\nimport type { Event, EventProcessor, Hub, Integration, PolymorphicRequest, Transaction } from '@sentry/types';\nimport { extractPathForTransaction } from '@sentry/utils';\n\nimport type { AddRequestDataToEventOptions, TransactionNamingScheme } from '../requestdata';\nimport { addRequestDataToEvent } from '../requestdata';\n\nexport type RequestDataIntegrationOptions = {\n  /**\n   * Controls what data is pulled from the request and added to the event\n   */\n  include?: {\n    cookies?: boolean;\n    data?: boolean;\n    headers?: boolean;\n    ip?: boolean;\n    query_string?: boolean;\n    url?: boolean;\n    user?:\n      | boolean\n      | {\n          id?: boolean;\n          username?: boolean;\n          email?: boolean;\n        };\n  };\n\n  /** Whether to identify transactions by parameterized path, parameterized path with method, or handler name */\n  transactionNamingScheme?: TransactionNamingScheme;\n};\n\nconst DEFAULT_OPTIONS = {\n  include: {\n    cookies: true,\n    data: true,\n    headers: true,\n    ip: false,\n    query_string: true,\n    url: true,\n    user: {\n      id: true,\n      username: true,\n      email: true,\n    },\n  },\n  transactionNamingScheme: 'methodPath',\n};\n\n/** Add data about a request to an event. Primarily for use in Node-based SDKs, but included in `@sentry/integrations`\n * so it can be used in cross-platform SDKs like `@sentry/nextjs`. */\nexport class RequestData implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'RequestData';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = RequestData.id;\n\n  /**\n   * Function for adding request data to event. Defaults to `addRequestDataToEvent` from `@sentry/node` for now, but\n   * left as a property so this integration can be moved to `@sentry/core` as a base class in case we decide to use\n   * something similar in browser-based SDKs in the future.\n   */\n  protected _addRequestData: (event: Event, req: PolymorphicRequest, options?: { [key: string]: unknown }) => Event;\n\n  private _options: Required<RequestDataIntegrationOptions>;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: RequestDataIntegrationOptions = {}) {\n    this._addRequestData = addRequestDataToEvent;\n    this._options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n      include: {\n        // @ts-expect-error It's mad because `method` isn't a known `include` key. (It's only here and not set by default in\n        // `addRequestDataToEvent` for legacy reasons. TODO (v8): Change that.)\n        method: true,\n        ...DEFAULT_OPTIONS.include,\n        ...options.include,\n        user:\n          options.include && typeof options.include.user === 'boolean'\n            ? options.include.user\n            : {\n                ...DEFAULT_OPTIONS.include.user,\n                // Unclear why TS still thinks `options.include.user` could be a boolean at this point\n                ...((options.include || {}).user as Record<string, boolean>),\n              },\n      },\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (eventProcessor: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    // Note: In the long run, most of the logic here should probably move into the request data utility functions. For\n    // the moment it lives here, though, until https://github.com/getsentry/sentry-javascript/issues/5718 is addressed.\n    // (TL;DR: Those functions touch many parts of the repo in many different ways, and need to be clened up. Once\n    // that's happened, it will be easier to add this logic in without worrying about unexpected side effects.)\n    const { transactionNamingScheme } = this._options;\n\n    addGlobalEventProcessor(event => {\n      const hub = getCurrentHub();\n      const self = hub.getIntegration(RequestData);\n\n      const { sdkProcessingMetadata = {} } = event;\n      const req = sdkProcessingMetadata.request;\n\n      // If the globally installed instance of this integration isn't associated with the current hub, `self` will be\n      // undefined\n      if (!self || !req) {\n        return event;\n      }\n\n      // The Express request handler takes a similar `include` option to that which can be passed to this integration.\n      // If passed there, we store it in `sdkProcessingMetadata`. TODO(v8): Force express and GCP people to use this\n      // integration, so that all of this passing and conversion isn't necessary\n      const addRequestDataOptions =\n        sdkProcessingMetadata.requestDataOptionsFromExpressHandler ||\n        sdkProcessingMetadata.requestDataOptionsFromGCPWrapper ||\n        convertReqDataIntegrationOptsToAddReqDataOpts(this._options);\n\n      const processedEvent = this._addRequestData(event, req, addRequestDataOptions);\n\n      // Transaction events already have the right `transaction` value\n      if (event.type === 'transaction' || transactionNamingScheme === 'handler') {\n        return processedEvent;\n      }\n\n      // In all other cases, use the request's associated transaction (if any) to overwrite the event's `transaction`\n      // value with a high-quality one\n      const reqWithTransaction = req as { _sentryTransaction?: Transaction };\n      const transaction = reqWithTransaction._sentryTransaction;\n      if (transaction) {\n        // TODO (v8): Remove the nextjs check and just base it on `transactionNamingScheme` for all SDKs. (We have to\n        // keep it the way it is for the moment, because changing the names of transactions in Sentry has the potential\n        // to break things like alert rules.)\n        const shouldIncludeMethodInTransactionName =\n          getSDKName(hub) === 'sentry.javascript.nextjs'\n            ? transaction.name.startsWith('/api')\n            : transactionNamingScheme !== 'path';\n\n        const [transactionValue] = extractPathForTransaction(req, {\n          path: true,\n          method: shouldIncludeMethodInTransactionName,\n          customRoute: transaction.name,\n        });\n\n        processedEvent.transaction = transactionValue;\n      }\n\n      return processedEvent;\n    });\n  }\n}\n\n/** Convert this integration's options to match what `addRequestDataToEvent` expects */\n/** TODO: Can possibly be deleted once https://github.com/getsentry/sentry-javascript/issues/5718 is fixed */\nfunction convertReqDataIntegrationOptsToAddReqDataOpts(\n  integrationOptions: Required<RequestDataIntegrationOptions>,\n): AddRequestDataToEventOptions {\n  const {\n    transactionNamingScheme,\n    include: { ip, user, ...requestOptions },\n  } = integrationOptions;\n\n  const requestIncludeKeys: string[] = [];\n  for (const [key, value] of Object.entries(requestOptions)) {\n    if (value) {\n      requestIncludeKeys.push(key);\n    }\n  }\n\n  let addReqDataUserOpt;\n  if (user === undefined) {\n    addReqDataUserOpt = true;\n  } else if (typeof user === 'boolean') {\n    addReqDataUserOpt = user;\n  } else {\n    const userIncludeKeys: string[] = [];\n    for (const [key, value] of Object.entries(user)) {\n      if (value) {\n        userIncludeKeys.push(key);\n      }\n    }\n    addReqDataUserOpt = userIncludeKeys;\n  }\n\n  return {\n    include: {\n      ip,\n      user: addReqDataUserOpt,\n      request: requestIncludeKeys.length !== 0 ? requestIncludeKeys : undefined,\n      transaction: transactionNamingScheme,\n    },\n  };\n}\n\nfunction getSDKName(hub: Hub): string | undefined {\n  try {\n    // For a long chain like this, it's fewer bytes to combine a try-catch with assuming everything is there than to\n    // write out a long chain of `a && a.b && a.b.c && ...`\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return hub.getClient()!.getOptions()!._metadata!.sdk!.name;\n  } catch (err) {\n    // In theory we should never get here\n    return undefined;\n  }\n}\n", "import type { Event, EventProcessor, Exception, Hub, Integration, StackFrame, StackParser } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport type { Debugger, InspectorNotification, Runtime, Session } from 'inspector';\nimport { LRUMap } from 'lru_map';\n\nimport { NODE_VERSION } from '../nodeVersion';\nimport type { NodeClientOptions } from '../types';\n\ntype Variables = Record<string, unknown>;\ntype OnPauseEvent = InspectorNotification<Debugger.PausedEventDataType>;\nexport interface DebugSession {\n  /** Configures and connects to the debug session */\n  configureAndConnect(onPause: (message: OnPauseEvent, complete: () => void) => void, captureAll: boolean): void;\n  /** Gets local variables for an objectId */\n  getLocalVariables(objectId: string, callback: (vars: Variables) => void): void;\n}\n\ntype Next<T> = (result: T) => void;\ntype Add<T> = (fn: Next<T>) => void;\ntype CallbackWrapper<T> = { add: Add<T>; next: Next<T> };\n\n/** Creates a container for callbacks to be called sequentially */\nexport function createCallbackList<T>(complete: Next<T>): CallbackWrapper<T> {\n  // A collection of callbacks to be executed last to first\n  let callbacks: Next<T>[] = [];\n\n  let completedCalled = false;\n  function checkedComplete(result: T): void {\n    callbacks = [];\n    if (completedCalled) {\n      return;\n    }\n    completedCalled = true;\n    complete(result);\n  }\n\n  // complete should be called last\n  callbacks.push(checkedComplete);\n\n  function add(fn: Next<T>): void {\n    callbacks.push(fn);\n  }\n\n  function next(result: T): void {\n    const popped = callbacks.pop() || checkedComplete;\n\n    try {\n      popped(result);\n    } catch (_) {\n      // If there is an error, we still want to call the complete callback\n      checkedComplete(result);\n    }\n  }\n\n  return { add, next };\n}\n\n/**\n * Promise API is available as `Experimental` and in Node 19 only.\n *\n * Callback-based API is `Stable` since v14 and `Experimental` since v8.\n * Because of that, we are creating our own `AsyncSession` class.\n *\n * https://nodejs.org/docs/latest-v19.x/api/inspector.html#promises-api\n * https://nodejs.org/docs/latest-v14.x/api/inspector.html\n */\nclass AsyncSession implements DebugSession {\n  private readonly _session: Session;\n\n  /** Throws if inspector API is not available */\n  public constructor() {\n    /*\n    TODO: We really should get rid of this require statement below for a couple of reasons:\n    1. It makes the integration unusable in the SvelteKit SDK, as it's not possible to use `require`\n       in SvelteKit server code (at least not by default).\n    2. Throwing in a constructor is bad practice\n\n    More context for a future attempt to fix this:\n    We already tried replacing it with import but didn't get it to work because of async problems.\n    We still called import in the constructor but assigned to a promise which we \"awaited\" in\n    `configureAndConnect`. However, this broke the Node integration tests as no local variables\n    were reported any more. We probably missed a place where we need to await the promise, too.\n    */\n\n    // Node can be built without inspector support so this can throw\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const { Session } = require('inspector');\n    this._session = new Session();\n  }\n\n  /** @inheritdoc */\n  public configureAndConnect(onPause: (event: OnPauseEvent, complete: () => void) => void, captureAll: boolean): void {\n    this._session.connect();\n\n    this._session.on('Debugger.paused', event => {\n      onPause(event, () => {\n        // After the pause work is complete, resume execution or the exception context memory is leaked\n        this._session.post('Debugger.resume');\n      });\n    });\n\n    this._session.post('Debugger.enable');\n    this._session.post('Debugger.setPauseOnExceptions', { state: captureAll ? 'all' : 'uncaught' });\n  }\n\n  /** @inheritdoc */\n  public getLocalVariables(objectId: string, complete: (vars: Variables) => void): void {\n    this._getProperties(objectId, props => {\n      const { add, next } = createCallbackList<Variables>(complete);\n\n      for (const prop of props) {\n        if (prop?.value?.objectId && prop?.value.className === 'Array') {\n          const id = prop.value.objectId;\n          add(vars => this._unrollArray(id, prop.name, vars, next));\n        } else if (prop?.value?.objectId && prop?.value?.className === 'Object') {\n          const id = prop.value.objectId;\n          add(vars => this._unrollObject(id, prop.name, vars, next));\n        } else if (prop?.value?.value || prop?.value?.description) {\n          add(vars => this._unrollOther(prop, vars, next));\n        }\n      }\n\n      next({});\n    });\n  }\n\n  /**\n   * Gets all the PropertyDescriptors of an object\n   */\n  private _getProperties(objectId: string, next: (result: Runtime.PropertyDescriptor[]) => void): void {\n    this._session.post(\n      'Runtime.getProperties',\n      {\n        objectId,\n        ownProperties: true,\n      },\n      (err, params) => {\n        if (err) {\n          next([]);\n        } else {\n          next(params.result);\n        }\n      },\n    );\n  }\n\n  /**\n   * Unrolls an array property\n   */\n  private _unrollArray(objectId: string, name: string, vars: Variables, next: (vars: Variables) => void): void {\n    this._getProperties(objectId, props => {\n      vars[name] = props\n        .filter(v => v.name !== 'length' && !isNaN(parseInt(v.name, 10)))\n        .sort((a, b) => parseInt(a.name, 10) - parseInt(b.name, 10))\n        .map(v => v?.value?.value);\n\n      next(vars);\n    });\n  }\n\n  /**\n   * Unrolls an object property\n   */\n  private _unrollObject(objectId: string, name: string, vars: Variables, next: (obj: Variables) => void): void {\n    this._getProperties(objectId, props => {\n      vars[name] = props\n        .map<[string, unknown]>(v => [v.name, v?.value?.value])\n        .reduce((obj, [key, val]) => {\n          obj[key] = val;\n          return obj;\n        }, {} as Variables);\n\n      next(vars);\n    });\n  }\n\n  /**\n   * Unrolls other properties\n   */\n  private _unrollOther(prop: Runtime.PropertyDescriptor, vars: Variables, next: (vars: Variables) => void): void {\n    if (prop?.value?.value) {\n      vars[prop.name] = prop.value.value;\n    } else if (prop?.value?.description && prop?.value?.type !== 'function') {\n      vars[prop.name] = `<${prop.value.description}>`;\n    }\n\n    next(vars);\n  }\n}\n\n/**\n * When using Vercel pkg, the inspector module is not available.\n * https://github.com/getsentry/sentry-javascript/issues/6769\n */\nfunction tryNewAsyncSession(): AsyncSession | undefined {\n  try {\n    return new AsyncSession();\n  } catch (e) {\n    return undefined;\n  }\n}\n\n// Add types for the exception event data\ntype PausedExceptionEvent = Debugger.PausedEventDataType & {\n  data: {\n    // This contains error.stack\n    description: string;\n  };\n};\n\n/** Could this be an anonymous function? */\nfunction isAnonymous(name: string | undefined): boolean {\n  return name !== undefined && ['', '?', '<anonymous>'].includes(name);\n}\n\n/** Do the function names appear to match? */\nfunction functionNamesMatch(a: string | undefined, b: string | undefined): boolean {\n  return a === b || (isAnonymous(a) && isAnonymous(b));\n}\n\n/** Creates a unique hash from stack frames */\nfunction hashFrames(frames: StackFrame[] | undefined): string | undefined {\n  if (frames === undefined) {\n    return;\n  }\n\n  // Only hash the 10 most recent frames (ie. the last 10)\n  return frames.slice(-10).reduce((acc, frame) => `${acc},${frame.function},${frame.lineno},${frame.colno}`, '');\n}\n\n/**\n * We use the stack parser to create a unique hash from the exception stack trace\n * This is used to lookup vars when the exception passes through the event processor\n */\nfunction hashFromStack(stackParser: StackParser, stack: string | undefined): string | undefined {\n  if (stack === undefined) {\n    return undefined;\n  }\n\n  return hashFrames(stackParser(stack, 1));\n}\n\nexport interface FrameVariables {\n  function: string;\n  vars?: Variables;\n}\n\n/** There are no options yet. This allows them to be added later without breaking changes */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface Options {\n  /**\n   * Capture local variables for both handled and unhandled exceptions\n   *\n   * Default: false - Only captures local variables for uncaught exceptions\n   */\n  captureAllExceptions?: boolean;\n}\n\n/**\n * Adds local variables to exception frames\n */\nexport class LocalVariables implements Integration {\n  public static id: string = 'LocalVariables';\n\n  public readonly name: string = LocalVariables.id;\n\n  private readonly _cachedFrames: LRUMap<string, FrameVariables[]> = new LRUMap(20);\n\n  public constructor(\n    private readonly _options: Options = {},\n    private readonly _session: DebugSession | undefined = tryNewAsyncSession(),\n  ) {}\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n    this._setup(addGlobalEventProcessor, getCurrentHub().getClient()?.getOptions());\n  }\n\n  /** Setup in a way that's easier to call from tests */\n  private _setup(\n    addGlobalEventProcessor: (callback: EventProcessor) => void,\n    clientOptions: NodeClientOptions | undefined,\n  ): void {\n    if (this._session && clientOptions?.includeLocalVariables) {\n      // Only setup this integration if the Node version is >= v18\n      // https://github.com/getsentry/sentry-javascript/issues/7697\n      const unsupportedNodeVersion = (NODE_VERSION.major || 0) < 18;\n\n      if (unsupportedNodeVersion) {\n        logger.log('The `LocalVariables` integration is only supported on Node >= v18.');\n        return;\n      }\n\n      this._session.configureAndConnect(\n        (ev, complete) =>\n          this._handlePaused(clientOptions.stackParser, ev as InspectorNotification<PausedExceptionEvent>, complete),\n        !!this._options.captureAllExceptions,\n      );\n\n      addGlobalEventProcessor(async event => this._addLocalVariables(event));\n    }\n  }\n\n  /**\n   * Handle the pause event\n   */\n  private _handlePaused(\n    stackParser: StackParser,\n    { params: { reason, data, callFrames } }: InspectorNotification<PausedExceptionEvent>,\n    complete: () => void,\n  ): void {\n    if (reason !== 'exception' && reason !== 'promiseRejection') {\n      complete();\n      return;\n    }\n\n    // data.description contains the original error.stack\n    const exceptionHash = hashFromStack(stackParser, data?.description);\n\n    if (exceptionHash == undefined) {\n      complete();\n      return;\n    }\n\n    const { add, next } = createCallbackList<FrameVariables[]>(frames => {\n      this._cachedFrames.set(exceptionHash, frames);\n      complete();\n    });\n\n    // Because we're queuing up and making all these calls synchronously, we can potentially overflow the stack\n    // For this reason we only attempt to get local variables for the first 5 frames\n    for (let i = 0; i < Math.min(callFrames.length, 5); i++) {\n      const { scopeChain, functionName, this: obj } = callFrames[i];\n\n      const localScope = scopeChain.find(scope => scope.type === 'local');\n\n      // obj.className is undefined in ESM modules\n      const fn = obj.className === 'global' || !obj.className ? functionName : `${obj.className}.${functionName}`;\n\n      if (localScope?.object.objectId === undefined) {\n        add(frames => {\n          frames[i] = { function: fn };\n          next(frames);\n        });\n      } else {\n        const id = localScope.object.objectId;\n        add(frames =>\n          this._session?.getLocalVariables(id, vars => {\n            frames[i] = { function: fn, vars };\n            next(frames);\n          }),\n        );\n      }\n    }\n\n    next([]);\n  }\n\n  /**\n   * Adds local variables event stack frames.\n   */\n  private _addLocalVariables(event: Event): Event {\n    for (const exception of event?.exception?.values || []) {\n      this._addLocalVariablesToException(exception);\n    }\n\n    return event;\n  }\n\n  /**\n   * Adds local variables to the exception stack frames.\n   */\n  private _addLocalVariablesToException(exception: Exception): void {\n    const hash = hashFrames(exception?.stacktrace?.frames);\n\n    if (hash === undefined) {\n      return;\n    }\n\n    // Check if we have local variables for an exception that matches the hash\n    // delete is identical to get but also removes the entry from the cache\n    const cachedFrames = this._cachedFrames.delete(hash);\n\n    if (cachedFrames === undefined) {\n      return;\n    }\n\n    const frameCount = exception.stacktrace?.frames?.length || 0;\n\n    for (let i = 0; i < frameCount; i++) {\n      // Sentry frames are in reverse order\n      const frameIndex = frameCount - i - 1;\n\n      // Drop out if we run out of frames to match up\n      if (!exception?.stacktrace?.frames?.[frameIndex] || !cachedFrames[i]) {\n        break;\n      }\n\n      if (\n        // We need to have vars to add\n        cachedFrames[i].vars === undefined ||\n        // We're not interested in frames that are not in_app because the vars are not relevant\n        exception.stacktrace.frames[frameIndex].in_app === false ||\n        // The function names need to match\n        !functionNamesMatch(exception.stacktrace.frames[frameIndex].function, cachedFrames[i].function)\n      ) {\n        continue;\n      }\n\n      exception.stacktrace.frames[frameIndex].vars = cachedFrames[i].vars;\n    }\n  }\n}\n", "import { getCurrentHub, getDynamicSamplingContextFromClient } from '@sentry/core';\nimport type { EventProcessor, Integration, Span } from '@sentry/types';\nimport {\n  dynamicRequire,\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  getSanitizedUrlString,\n  parseUrl,\n  stringMatchesSomePattern,\n} from '@sentry/utils';\nimport { LRUMap } from 'lru_map';\n\nimport type { NodeClient } from '../../client';\nimport { NODE_VERSION } from '../../nodeVersion';\nimport { isSentryRequest } from '../utils/http';\nimport type {\n  DiagnosticsChannel,\n  RequestCreateMessage,\n  RequestEndMessage,\n  RequestErrorMessage,\n  RequestWithSentry,\n} from './types';\n\nexport enum ChannelName {\n  // https://github.com/nodejs/undici/blob/e6fc80f809d1217814c044f52ed40ef13f21e43c/docs/api/DiagnosticsChannel.md#undicirequestcreate\n  RequestCreate = 'undici:request:create',\n  RequestEnd = 'undici:request:headers',\n  RequestError = 'undici:request:error',\n}\n\nexport interface UndiciOptions {\n  /**\n   * Whether breadcrumbs should be recorded for requests\n   * Defaults to true\n   */\n  breadcrumbs: boolean;\n  /**\n   * Function determining whether or not to create spans to track outgoing requests to the given URL.\n   * By default, spans will be created for all outgoing requests.\n   */\n  shouldCreateSpanForRequest?: (url: string) => boolean;\n}\n\n// Please note that you cannot use `console.log` to debug the callbacks registered to the `diagnostics_channel` API.\n// To debug, you can use `writeFileSync` to write to a file:\n// https://nodejs.org/api/async_hooks.html#printing-in-asynchook-callbacks\n//\n// import { writeFileSync } from 'fs';\n// import { format } from 'util';\n//\n// function debug(...args: any): void {\n//   // Use a function like this one when debugging inside an AsyncHook callback\n//   // @ts-expect-error any\n//   writeFileSync('log.out', `${format(...args)}\\n`, { flag: 'a' });\n// }\n\n/**\n * Instruments outgoing HTTP requests made with the `undici` package via\n * Node's `diagnostics_channel` API.\n *\n * Supports Undici 4.7.0 or higher.\n *\n * Requires Node 16.17.0 or higher.\n */\nexport class Undici implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Undici';\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = Undici.id;\n\n  private readonly _options: UndiciOptions;\n\n  private readonly _createSpanUrlMap: LRUMap<string, boolean> = new LRUMap(100);\n  private readonly _headersUrlMap: LRUMap<string, boolean> = new LRUMap(100);\n\n  public constructor(_options: Partial<UndiciOptions> = {}) {\n    this._options = {\n      breadcrumbs: _options.breadcrumbs === undefined ? true : _options.breadcrumbs,\n      shouldCreateSpanForRequest: _options.shouldCreateSpanForRequest,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void): void {\n    // Requires Node 16+ to use the diagnostics_channel API.\n    if (NODE_VERSION.major && NODE_VERSION.major < 16) {\n      return;\n    }\n\n    let ds: DiagnosticsChannel | undefined;\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-var-requires\n      ds = dynamicRequire(module, 'diagnostics_channel') as DiagnosticsChannel;\n    } catch (e) {\n      // no-op\n    }\n\n    if (!ds || !ds.subscribe) {\n      return;\n    }\n\n    // https://github.com/nodejs/undici/blob/e6fc80f809d1217814c044f52ed40ef13f21e43c/docs/api/DiagnosticsChannel.md\n    ds.subscribe(ChannelName.RequestCreate, this._onRequestCreate);\n    ds.subscribe(ChannelName.RequestEnd, this._onRequestEnd);\n    ds.subscribe(ChannelName.RequestError, this._onRequestError);\n  }\n\n  /** Helper that wraps shouldCreateSpanForRequest option */\n  private _shouldCreateSpan(url: string): boolean {\n    if (this._options.shouldCreateSpanForRequest === undefined) {\n      return true;\n    }\n\n    const cachedDecision = this._createSpanUrlMap.get(url);\n    if (cachedDecision !== undefined) {\n      return cachedDecision;\n    }\n\n    const decision = this._options.shouldCreateSpanForRequest(url);\n    this._createSpanUrlMap.set(url, decision);\n    return decision;\n  }\n\n  private _onRequestCreate = (message: unknown): void => {\n    const hub = getCurrentHub();\n    if (!hub.getIntegration(Undici)) {\n      return;\n    }\n\n    const { request } = message as RequestCreateMessage;\n\n    const stringUrl = request.origin ? request.origin.toString() + request.path : request.path;\n\n    if (isSentryRequest(stringUrl) || request.__sentry_span__ !== undefined) {\n      return;\n    }\n\n    const client = hub.getClient<NodeClient>();\n    if (!client) {\n      return;\n    }\n\n    const clientOptions = client.getOptions();\n    const scope = hub.getScope();\n\n    const parentSpan = scope.getSpan();\n\n    const span = this._shouldCreateSpan(stringUrl) ? createRequestSpan(parentSpan, request, stringUrl) : undefined;\n    if (span) {\n      request.__sentry_span__ = span;\n    }\n\n    const shouldAttachTraceData = (url: string): boolean => {\n      if (clientOptions.tracePropagationTargets === undefined) {\n        return true;\n      }\n\n      const cachedDecision = this._headersUrlMap.get(url);\n      if (cachedDecision !== undefined) {\n        return cachedDecision;\n      }\n\n      const decision = stringMatchesSomePattern(url, clientOptions.tracePropagationTargets);\n      this._headersUrlMap.set(url, decision);\n      return decision;\n    };\n\n    if (shouldAttachTraceData(stringUrl)) {\n      if (span) {\n        const dynamicSamplingContext = span?.transaction?.getDynamicSamplingContext();\n        const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n\n        setHeadersOnRequest(request, span.toTraceparent(), sentryBaggageHeader);\n      } else {\n        const { traceId, sampled, dsc } = scope.getPropagationContext();\n        const sentryTrace = generateSentryTraceHeader(traceId, undefined, sampled);\n        const dynamicSamplingContext = dsc || getDynamicSamplingContextFromClient(traceId, client, scope);\n        const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n        setHeadersOnRequest(request, sentryTrace, sentryBaggageHeader);\n      }\n    }\n  };\n\n  private _onRequestEnd = (message: unknown): void => {\n    const hub = getCurrentHub();\n    if (!hub.getIntegration(Undici)) {\n      return;\n    }\n\n    const { request, response } = message as RequestEndMessage;\n\n    const stringUrl = request.origin ? request.origin.toString() + request.path : request.path;\n\n    if (isSentryRequest(stringUrl)) {\n      return;\n    }\n\n    const span = request.__sentry_span__;\n    if (span) {\n      span.setHttpStatus(response.statusCode);\n      span.finish();\n    }\n\n    if (this._options.breadcrumbs) {\n      hub.addBreadcrumb(\n        {\n          category: 'http',\n          data: {\n            method: request.method,\n            status_code: response.statusCode,\n            url: stringUrl,\n          },\n          type: 'http',\n        },\n        {\n          event: 'response',\n          request,\n          response,\n        },\n      );\n    }\n  };\n\n  private _onRequestError = (message: unknown): void => {\n    const hub = getCurrentHub();\n    if (!hub.getIntegration(Undici)) {\n      return;\n    }\n\n    const { request } = message as RequestErrorMessage;\n\n    const stringUrl = request.origin ? request.origin.toString() + request.path : request.path;\n\n    if (isSentryRequest(stringUrl)) {\n      return;\n    }\n\n    const span = request.__sentry_span__;\n    if (span) {\n      span.setStatus('internal_error');\n      span.finish();\n    }\n\n    if (this._options.breadcrumbs) {\n      hub.addBreadcrumb(\n        {\n          category: 'http',\n          data: {\n            method: request.method,\n            url: stringUrl,\n          },\n          level: 'error',\n          type: 'http',\n        },\n        {\n          event: 'error',\n          request,\n        },\n      );\n    }\n  };\n}\n\nfunction setHeadersOnRequest(\n  request: RequestWithSentry,\n  sentryTrace: string,\n  sentryBaggageHeader: string | undefined,\n): void {\n  if (request.__sentry_has_headers__) {\n    return;\n  }\n\n  request.addHeader('sentry-trace', sentryTrace);\n  if (sentryBaggageHeader) {\n    request.addHeader('baggage', sentryBaggageHeader);\n  }\n\n  request.__sentry_has_headers__ = true;\n}\n\nfunction createRequestSpan(\n  activeSpan: Span | undefined,\n  request: RequestWithSentry,\n  stringUrl: string,\n): Span | undefined {\n  const url = parseUrl(stringUrl);\n\n  const method = request.method || 'GET';\n  const data: Record<string, unknown> = {\n    'http.method': method,\n  };\n  if (url.search) {\n    data['http.query'] = url.search;\n  }\n  if (url.hash) {\n    data['http.fragment'] = url.hash;\n  }\n  return activeSpan?.startChild({\n    op: 'http.client',\n    origin: 'auto.http.node.undici',\n    description: `${method} ${getSanitizedUrlString(url)}`,\n    data,\n  });\n}\n", "import { posix, sep } from 'path';\n\nconst isWindowsPlatform = sep === '\\\\';\n\n/** normalizes Windows paths */\nfunction normalizeWindowsPath(path: string): string {\n  return path\n    .replace(/^[A-Z]:/, '') // remove Windows-style prefix\n    .replace(/\\\\/g, '/'); // replace all `\\` instances with `/`\n}\n\n/** Gets the module from a filename */\nexport function getModuleFromFilename(\n  filename: string | undefined,\n  normalizeWindowsPathSeparator: boolean = isWindowsPlatform,\n): string | undefined {\n  if (!filename) {\n    return;\n  }\n\n  const normalizedFilename = normalizeWindowsPathSeparator ? normalizeWindowsPath(filename) : filename;\n\n  // eslint-disable-next-line prefer-const\n  let { root, dir, base: basename, ext } = posix.parse(normalizedFilename);\n\n  const base = (require && require.main && require.main.filename && dir) || global.process.cwd();\n\n  const normalizedBase = `${base}/`;\n\n  // It's specifically a module\n  let file = basename;\n\n  if (ext === '.js') {\n    file = file.slice(0, file.length - '.js'.length);\n  }\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    dir = '.';\n  }\n\n  let n = dir.lastIndexOf('/node_modules/');\n  if (n > -1) {\n    // /node_modules/ is 14 chars\n    return `${dir.slice(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 = `${dir}/`.lastIndexOf(normalizedBase, 0);\n\n  if (n === 0) {\n    let moduleName = dir.slice(normalizedBase.length).replace(/\\//g, '.');\n    if (moduleName) {\n      moduleName += ':';\n    }\n    moduleName += file;\n    return moduleName;\n  }\n  return file;\n}\n", "/* eslint-disable max-lines */\nimport {\n  getCurrentHub,\n  getIntegrationsToSetup,\n  getMainCarrier,\n  initAndBind,\n  Integrations as CoreIntegrations,\n} from '@sentry/core';\nimport type { SessionStatus, StackParser } from '@sentry/types';\nimport {\n  createStackParser,\n  GLOBAL_OBJ,\n  nodeStackLineParser,\n  stackParserFromStackParserOptions,\n  tracingContextFromHeaders,\n} from '@sentry/utils';\n\nimport { setNodeAsyncContextStrategy } from './async';\nimport { NodeClient } from './client';\nimport {\n  Console,\n  Context,\n  ContextLines,\n  Http,\n  LinkedErrors,\n  LocalVariables,\n  Modules,\n  OnUncaughtException,\n  OnUnhandledRejection,\n  RequestData,\n  Undici,\n} from './integrations';\nimport { getModuleFromFilename } from './module';\nimport { makeNodeTransport } from './transports';\nimport type { NodeClientOptions, NodeOptions } from './types';\n\nexport const defaultIntegrations = [\n  // Common\n  new CoreIntegrations.InboundFilters(),\n  new CoreIntegrations.FunctionToString(),\n  // Native Wrappers\n  new Console(),\n  new Http(),\n  new Undici(),\n  // Global Handlers\n  new OnUncaughtException(),\n  new OnUnhandledRejection(),\n  // Event Info\n  new ContextLines(),\n  new LocalVariables(),\n  new Context(),\n  new Modules(),\n  new RequestData(),\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  const carrier = getMainCarrier();\n\n  setNodeAsyncContextStrategy();\n\n  const autoloadedIntegrations = carrier.__SENTRY__?.integrations || [];\n\n  options.defaultIntegrations =\n    options.defaultIntegrations === false\n      ? []\n      : [\n          ...(Array.isArray(options.defaultIntegrations) ? options.defaultIntegrations : defaultIntegrations),\n          ...autoloadedIntegrations,\n        ];\n\n  if (options.dsn === undefined && process.env.SENTRY_DSN) {\n    options.dsn = process.env.SENTRY_DSN;\n  }\n\n  const sentryTracesSampleRate = process.env.SENTRY_TRACES_SAMPLE_RATE;\n  if (options.tracesSampleRate === undefined && sentryTracesSampleRate) {\n    const tracesSampleRate = parseFloat(sentryTracesSampleRate);\n    if (isFinite(tracesSampleRate)) {\n      options.tracesSampleRate = tracesSampleRate;\n    }\n  }\n\n  if (options.release === undefined) {\n    const detectedRelease = getSentryRelease();\n    if (detectedRelease !== undefined) {\n      options.release = detectedRelease;\n    } else {\n      // If release is not provided, then we should disable autoSessionTracking\n      options.autoSessionTracking = false;\n    }\n  }\n\n  if (options.environment === undefined && process.env.SENTRY_ENVIRONMENT) {\n    options.environment = process.env.SENTRY_ENVIRONMENT;\n  }\n\n  if (options.autoSessionTracking === undefined && options.dsn !== undefined) {\n    options.autoSessionTracking = true;\n  }\n\n  if (options.instrumenter === undefined) {\n    options.instrumenter = 'sentry';\n  }\n\n  // TODO(v7): Refactor this to reduce the logic above\n  const clientOptions: NodeClientOptions = {\n    ...options,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup(options),\n    transport: options.transport || makeNodeTransport,\n  };\n\n  initAndBind(options.clientClass || NodeClient, clientOptions);\n\n  if (options.autoSessionTracking) {\n    startSessionTracking();\n  }\n\n  updateScopeFromEnvVariables();\n}\n\n/**\n * Function that takes an instance of NodeClient and checks if autoSessionTracking option is enabled for that client\n */\nexport function isAutoSessionTrackingEnabled(client?: NodeClient): boolean {\n  if (client === undefined) {\n    return false;\n  }\n  const clientOptions = client && client.getOptions();\n  if (clientOptions && clientOptions.autoSessionTracking !== undefined) {\n    return clientOptions.autoSessionTracking;\n  }\n  return false;\n}\n\n/**\n * Returns a release dynamically from environment variables.\n */\nexport function getSentryRelease(fallback?: string): string | undefined {\n  // Always read first as Sentry takes this as precedence\n  if (process.env.SENTRY_RELEASE) {\n    return process.env.SENTRY_RELEASE;\n  }\n\n  // This supports the variable that sentry-webpack-plugin injects\n  if (GLOBAL_OBJ.SENTRY_RELEASE && GLOBAL_OBJ.SENTRY_RELEASE.id) {\n    return GLOBAL_OBJ.SENTRY_RELEASE.id;\n  }\n\n  return (\n    // GitHub Actions - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables\n    process.env.GITHUB_SHA ||\n    // Netlify - https://docs.netlify.com/configure-builds/environment-variables/#build-metadata\n    process.env.COMMIT_REF ||\n    // Vercel - https://vercel.com/docs/v2/build-step#system-environment-variables\n    process.env.VERCEL_GIT_COMMIT_SHA ||\n    process.env.VERCEL_GITHUB_COMMIT_SHA ||\n    process.env.VERCEL_GITLAB_COMMIT_SHA ||\n    process.env.VERCEL_BITBUCKET_COMMIT_SHA ||\n    // Zeit (now known as Vercel)\n    process.env.ZEIT_GITHUB_COMMIT_SHA ||\n    process.env.ZEIT_GITLAB_COMMIT_SHA ||\n    process.env.ZEIT_BITBUCKET_COMMIT_SHA ||\n    fallback\n  );\n}\n\n/** Node.js stack parser */\nexport const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(getModuleFromFilename));\n\n/**\n * Enable automatic Session Tracking for the node process.\n */\nfunction startSessionTracking(): void {\n  const hub = getCurrentHub();\n  hub.startSession();\n  // Emitted in the case of healthy sessions, error of `mechanism.handled: true` and unhandledrejections because\n  // The 'beforeExit' event is not emitted for conditions causing explicit termination,\n  // such as calling process.exit() or uncaught exceptions.\n  // Ref: https://nodejs.org/api/process.html#process_event_beforeexit\n  process.on('beforeExit', () => {\n    const session = hub.getScope().getSession();\n    const terminalStates: SessionStatus[] = ['exited', 'crashed'];\n    // Only call endSession, if the Session exists on Scope and SessionStatus is not a\n    // Terminal Status i.e. Exited or Crashed because\n    // \"When a session is moved away from ok it must not be updated anymore.\"\n    // Ref: https://develop.sentry.dev/sdk/sessions/\n    if (session && !terminalStates.includes(session.status)) hub.endSession();\n  });\n}\n\n/**\n * Update scope and propagation context based on environmental variables.\n *\n * See https://github.com/getsentry/rfcs/blob/main/text/0071-continue-trace-over-process-boundaries.md\n * for more details.\n */\nfunction updateScopeFromEnvVariables(): void {\n  const sentryUseEnvironment = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase();\n  if (!['false', 'n', 'no', 'off', '0'].includes(sentryUseEnvironment)) {\n    const sentryTraceEnv = process.env.SENTRY_TRACE;\n    const baggageEnv = process.env.SENTRY_BAGGAGE;\n    const { propagationContext } = tracingContextFromHeaders(sentryTraceEnv, baggageEnv);\n    getCurrentHub().getScope().setPropagationContext(propagationContext);\n  }\n}\n", "import * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Recursively read the contents of a directory.\n *\n * @param targetDir Absolute or relative path of the directory to scan. All returned paths will be relative to this\n * directory.\n * @returns Array holding all relative paths\n */\nexport function deepReadDirSync(targetDir: string): string[] {\n  const targetDirAbsPath = path.resolve(targetDir);\n\n  if (!fs.existsSync(targetDirAbsPath)) {\n    throw new Error(`Cannot read contents of ${targetDirAbsPath}. Directory does not exist.`);\n  }\n\n  if (!fs.statSync(targetDirAbsPath).isDirectory()) {\n    throw new Error(`Cannot read contents of ${targetDirAbsPath}, because it is not a directory.`);\n  }\n\n  // This does the same thing as its containing function, `deepReadDirSync` (except that - purely for convenience - it\n  // deals in absolute paths rather than relative ones). We need this to be separate from the outer function to preserve\n  // the difference between `targetDirAbsPath` and `currentDirAbsPath`.\n  const deepReadCurrentDir = (currentDirAbsPath: string): string[] => {\n    return fs.readdirSync(currentDirAbsPath).reduce((absPaths: string[], itemName: string) => {\n      const itemAbsPath = path.join(currentDirAbsPath, itemName);\n\n      if (fs.statSync(itemAbsPath).isDirectory()) {\n        return absPaths.concat(deepReadCurrentDir(itemAbsPath));\n      }\n\n      absPaths.push(itemAbsPath);\n      return absPaths;\n    }, []);\n  };\n\n  return deepReadCurrentDir(targetDirAbsPath).map(absPath => path.relative(targetDirAbsPath, absPath));\n}\n", "/**\n * Deprecated functions which are slated for removal in v8. When the time comes, this entire file can be deleted.\n *\n * See https://github.com/getsentry/sentry-javascript/pull/5257.\n */\n\n/* eslint-disable deprecation/deprecation */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, ExtractedNodeRequestData, PolymorphicRequest } from '@sentry/types';\n\nimport type { AddRequestDataToEventOptions } from './requestdata';\nimport { addRequestDataToEvent, extractRequestData as _extractRequestData } from './requestdata';\n\n/**\n * @deprecated `Handlers.ExpressRequest` is deprecated and will be removed in v8. Use `PolymorphicRequest` instead.\n */\nexport type ExpressRequest = PolymorphicRequest;\n\n/**\n * Normalizes data from the request object, accounting for framework differences.\n *\n * @deprecated `Handlers.extractRequestData` is deprecated and will be removed in v8. Use `extractRequestData` instead.\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.\n * @returns An object containing normalized request data\n */\nexport function extractRequestData(req: { [key: string]: any }, keys?: string[]): ExtractedNodeRequestData {\n  return _extractRequestData(req, { include: keys });\n}\n\n/**\n * Options deciding what parts of the request to use when enhancing an event\n *\n * @deprecated `Handlers.ParseRequestOptions` is deprecated and will be removed in v8. Use\n * `AddRequestDataToEventOptions` in `@sentry/utils` instead.\n */\nexport type ParseRequestOptions = AddRequestDataToEventOptions['include'] & {\n  serverName?: boolean;\n  version?: boolean;\n};\n\n/**\n * Enriches passed event with request data.\n *\n * @deprecated `Handlers.parseRequest` is deprecated and will be removed in v8. Use `addRequestDataToEvent` instead.\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  return addRequestDataToEvent(event, req, { include: options });\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n  captureException,\n  flush,\n  getCurrentHub,\n  hasTracingEnabled,\n  runWithAsyncContext,\n  startTransaction,\n  withScope,\n} from '@sentry/core';\nimport type { Span } from '@sentry/types';\nimport type { AddRequestDataToEventOptions } from '@sentry/utils';\nimport {\n  addExceptionMechanism,\n  addRequestDataToTransaction,\n  dropUndefinedKeys,\n  extractPathForTransaction,\n  isString,\n  logger,\n  normalize,\n  tracingContextFromHeaders,\n} from '@sentry/utils';\nimport type * as http from 'http';\n\nimport type { NodeClient } from './client';\nimport { extractRequestData } from './requestdata';\n// TODO (v8 / XXX) Remove this import\nimport type { ParseRequestOptions } from './requestDataDeprecated';\nimport { isAutoSessionTrackingEnabled } from './sdk';\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    const hub = getCurrentHub();\n    const options = hub.getClient()?.getOptions();\n\n    if (\n      !options ||\n      options.instrumenter !== 'sentry' ||\n      req.method?.toUpperCase() === 'OPTIONS' ||\n      req.method?.toUpperCase() === 'HEAD'\n    ) {\n      return next();\n    }\n\n    const sentryTrace = req.headers && isString(req.headers['sentry-trace']) ? req.headers['sentry-trace'] : undefined;\n    const baggage = req.headers?.baggage;\n    const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n      sentryTrace,\n      baggage,\n    );\n    hub.getScope().setPropagationContext(propagationContext);\n\n    if (!hasTracingEnabled(options)) {\n      return next();\n    }\n\n    const [name, source] = extractPathForTransaction(req, { path: true, method: true });\n    const transaction = startTransaction(\n      {\n        name,\n        op: 'http.server',\n        origin: 'auto.http.node.tracingHandler',\n        ...traceparentData,\n        metadata: {\n          dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n          // The request should already have been stored in `scope.sdkProcessingMetadata` (which will become\n          // `event.sdkProcessingMetadata` the same way the metadata here will) by `sentryRequestMiddleware`, but on the\n          // off chance someone is using `sentryTracingMiddleware` without `sentryRequestMiddleware`, it doesn't hurt to\n          // be sure\n          request: req,\n          source,\n        },\n      },\n      // extra context passed to the tracesSampler\n      { request: extractRequestData(req) },\n    );\n\n    // We put the transaction on the scope so users can attach children to it\n    hub.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        addRequestDataToTransaction(transaction, req);\n        transaction.setHttpStatus(res.statusCode);\n        transaction.finish();\n      });\n    });\n\n    next();\n  };\n}\n\nexport type RequestHandlerOptions =\n  // TODO (v8 / XXX) Remove ParseRequestOptions type and eslint override\n  // eslint-disable-next-line deprecation/deprecation\n  | (ParseRequestOptions | AddRequestDataToEventOptions) & {\n      flushTimeout?: number;\n    };\n\n/**\n * Backwards compatibility shim which can be removed in v8. Forces the given options to follow the\n * `AddRequestDataToEventOptions` interface.\n *\n * TODO (v8): Get rid of this, and stop passing `requestDataOptionsFromExpressHandler` to `setSDKProcessingMetadata`.\n */\nfunction convertReqHandlerOptsToAddReqDataOpts(\n  reqHandlerOptions: RequestHandlerOptions = {},\n): AddRequestDataToEventOptions | undefined {\n  let addRequestDataOptions: AddRequestDataToEventOptions | undefined;\n\n  if ('include' in reqHandlerOptions) {\n    addRequestDataOptions = { include: reqHandlerOptions.include };\n  } else {\n    // eslint-disable-next-line deprecation/deprecation\n    const { ip, request, transaction, user } = reqHandlerOptions as ParseRequestOptions;\n\n    if (ip || request || transaction || user) {\n      addRequestDataOptions = { include: dropUndefinedKeys({ ip, request, transaction, user }) };\n    }\n  }\n\n  return addRequestDataOptions;\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  // TODO (v8): Get rid of this\n  const requestDataOptions = convertReqHandlerOptsToAddReqDataOpts(options);\n\n  const currentHub = getCurrentHub();\n  const client = currentHub.getClient<NodeClient>();\n  // Initialise an instance of SessionFlusher on the client when `autoSessionTracking` is enabled and the\n  // `requestHandler` middleware is used indicating that we are running in SessionAggregates mode\n  if (client && isAutoSessionTrackingEnabled(client)) {\n    client.initSessionFlusher();\n\n    // If Scope contains a Single mode Session, it is removed in favor of using Session Aggregates mode\n    const scope = currentHub.getScope();\n    if (scope.getSession()) {\n      scope.setSession();\n    }\n  }\n\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        void flush(options.flushTimeout)\n          .then(() => {\n            _end.call(this, chunk, encoding, cb);\n          })\n          .then(null, e => {\n            __DEBUG_BUILD__ && logger.error(e);\n            _end.call(this, chunk, encoding, cb);\n          });\n      };\n    }\n    runWithAsyncContext(() => {\n      const currentHub = getCurrentHub();\n      currentHub.configureScope(scope => {\n        scope.setSDKProcessingMetadata({\n          request: req,\n          // TODO (v8): Stop passing this\n          requestDataOptionsFromExpressHandler: requestDataOptions,\n        });\n\n        const client = currentHub.getClient<NodeClient>();\n        if (isAutoSessionTrackingEnabled(client)) {\n          const scope = currentHub.getScope();\n          // Set `status` of `RequestSession` to Ok, at the beginning of the request\n          scope.setRequestSession({ status: 'ok' });\n        }\n      });\n\n      res.once('finish', () => {\n        const client = currentHub.getClient<NodeClient>();\n        if (isAutoSessionTrackingEnabled(client)) {\n          setImmediate(() => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (client && (client as any)._captureRequestSession) {\n              // Calling _captureRequestSession to capture request session at the end of the request by incrementing\n              // the correct SessionAggregates bucket i.e. crashed, errored or exited\n              // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n              (client as any)._captureRequestSession();\n            }\n          });\n        }\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?(this: void, 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    const shouldHandleError = (options && options.shouldHandleError) || defaultShouldHandleError;\n\n    if (shouldHandleError(error)) {\n      withScope(_scope => {\n        // The request should already have been stored in `scope.sdkProcessingMetadata` by `sentryRequestMiddleware`,\n        // but on the off chance someone is using `sentryErrorMiddleware` without `sentryRequestMiddleware`, it doesn't\n        // hurt to be sure\n        _scope.setSDKProcessingMetadata({ request: _req });\n\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\n        const client = getCurrentHub().getClient<NodeClient>();\n        if (client && isAutoSessionTrackingEnabled(client)) {\n          // Check if the `SessionFlusher` is instantiated on the client to go into this branch that marks the\n          // `requestSession.status` as `Crashed`, and this check is necessary because the `SessionFlusher` is only\n          // instantiated when the the`requestHandler` middleware is initialised, which indicates that we should be\n          // running in SessionAggregates mode\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n          const isSessionAggregatesMode = (client as any)._sessionFlusher !== undefined;\n          if (isSessionAggregatesMode) {\n            const requestSession = _scope.getRequestSession();\n            // If an error bubbles to the `errorHandler`, then this is an unhandled error, and should be reported as a\n            // Crashed session. The `_requestSession.status` is checked to ensure that this error is happening within\n            // the bounds of a request, and if so the status is updated\n            if (requestSession && requestSession.status !== undefined) {\n              requestSession.status = 'crashed';\n            }\n          }\n        }\n\n        _scope.addEventProcessor(event => {\n          addExceptionMechanism(event, { type: 'middleware', handled: false });\n          return event;\n        });\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\ninterface SentryTrpcMiddlewareOptions {\n  /** Whether to include procedure inputs in reported events. Defaults to `false`. */\n  attachRpcInput?: boolean;\n}\n\ninterface TrpcMiddlewareArguments<T> {\n  path: string;\n  type: 'query' | 'mutation' | 'subscription';\n  next: () => T;\n  rawInput: unknown;\n}\n\n/**\n * Sentry tRPC middleware that names the handling transaction after the called procedure.\n *\n * Use the Sentry tRPC middleware in combination with the Sentry server integration,\n * e.g. Express Request Handlers or Next.js SDK.\n */\nexport function trpcMiddleware(options: SentryTrpcMiddlewareOptions = {}) {\n  return function <T>({ path, type, next, rawInput }: TrpcMiddlewareArguments<T>): T {\n    const hub = getCurrentHub();\n    const clientOptions = hub.getClient()?.getOptions();\n    const sentryTransaction = hub.getScope().getTransaction();\n\n    if (sentryTransaction) {\n      sentryTransaction.setName(`trpc/${path}`, 'route');\n      sentryTransaction.op = 'rpc.server';\n\n      const trpcContext: Record<string, unknown> = {\n        procedure_type: type,\n      };\n\n      if (options.attachRpcInput !== undefined ? options.attachRpcInput : clientOptions?.sendDefaultPii) {\n        trpcContext.input = normalize(rawInput);\n      }\n\n      sentryTransaction.setContext('trpc', trpcContext);\n    }\n\n    return next();\n  };\n}\n\n// TODO (v8 / #5257): Remove this\n// eslint-disable-next-line deprecation/deprecation\nexport type { ParseRequestOptions, ExpressRequest } from './requestDataDeprecated';\n// eslint-disable-next-line deprecation/deprecation\nexport { parseRequest, extractRequestData } from './requestDataDeprecated';\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst console = require('./console.js');\nconst http = require('./http.js');\nconst onuncaughtexception = require('./onuncaughtexception.js');\nconst onunhandledrejection = require('./onunhandledrejection.js');\nconst linkederrors = require('./linkederrors.js');\nconst modules = require('./modules.js');\nconst contextlines = require('./contextlines.js');\nconst context = require('./context.js');\nconst requestdata = require('./requestdata.js');\nconst localvariables = require('./localvariables.js');\nconst index = require('./undici/index.js');\n\n\n\nexports.Console = console.Console;\nexports.Http = http.Http;\nexports.OnUncaughtException = onuncaughtexception.OnUncaughtException;\nexports.OnUnhandledRejection = onunhandledrejection.OnUnhandledRejection;\nexports.LinkedErrors = linkederrors.LinkedErrors;\nexports.Modules = modules.Modules;\nexports.ContextLines = contextlines.ContextLines;\nexports.Context = context.Context;\nexports.RequestData = requestdata.RequestData;\nexports.LocalVariables = localvariables.LocalVariables;\nexports.Undici = index.Undici;\n//# sourceMappingURL=index.js.map\n", "Object.defineProperty(exports, '__esModule', { value: true });\n\nconst tracing = require('@sentry-internal/tracing');\n\n\n\nexports.Apollo = tracing.Apollo;\nexports.Express = tracing.Express;\nexports.GraphQL = tracing.GraphQL;\nexports.Mongo = tracing.Mongo;\nexports.Mysql = tracing.Mysql;\nexports.Postgres = tracing.Postgres;\nexports.Prisma = tracing.Prisma;\n//# sourceMappingURL=integrations.js.map\n", "export type {\n  Breadcrumb,\n  BreadcrumbHint,\n  PolymorphicRequest,\n  Request,\n  SdkInfo,\n  Event,\n  EventHint,\n  Exception,\n  Session,\n  // eslint-disable-next-line deprecation/deprecation\n  Severity,\n  SeverityLevel,\n  Span,\n  StackFrame,\n  Stacktrace,\n  Thread,\n  Transaction,\n  User,\n} from '@sentry/types';\nexport type { AddRequestDataToEventOptions } from '@sentry/utils';\n\nexport type { TransactionNamingScheme } from './requestdata';\nexport type { NodeOptions } from './types';\n\nexport {\n  addGlobalEventProcessor,\n  addBreadcrumb,\n  captureException,\n  captureEvent,\n  captureMessage,\n  close,\n  configureScope,\n  createTransport,\n  extractTraceparentData,\n  flush,\n  getActiveTransaction,\n  getHubFromCarrier,\n  getCurrentHub,\n  Hub,\n  lastEventId,\n  makeMain,\n  runWithAsyncContext,\n  Scope,\n  startTransaction,\n  SDK_VERSION,\n  setContext,\n  setExtra,\n  setExtras,\n  setTag,\n  setTags,\n  setUser,\n  spanStatusfromHttpCode,\n  trace,\n  withScope,\n  captureCheckIn,\n  setMeasurement,\n  getActiveSpan,\n  startSpan,\n  // eslint-disable-next-line deprecation/deprecation\n  startActiveSpan,\n  startInactiveSpan,\n  startSpanManual,\n} from '@sentry/core';\nexport type { SpanStatusType } from '@sentry/core';\nexport { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';\n\nexport { NodeClient } from './client';\nexport { makeNodeTransport } from './transports';\nexport { defaultIntegrations, init, defaultStackParser, getSentryRelease } from './sdk';\nexport { addRequestDataToEvent, DEFAULT_USER_INCLUDES, extractRequestData } from './requestdata';\nexport { deepReadDirSync } from './utils';\nexport { getModuleFromFilename } from './module';\n\nimport { Integrations as CoreIntegrations } from '@sentry/core';\n\nimport * as Handlers from './handlers';\nimport * as NodeIntegrations from './integrations';\nimport * as TracingIntegrations from './tracing/integrations';\n\nconst INTEGRATIONS = {\n  ...CoreIntegrations,\n  ...NodeIntegrations,\n  ...TracingIntegrations,\n};\n\nexport { INTEGRATIONS as Integrations, Handlers };\n", "'use strict'\n\nmodule.exports = function () {\n  if (!process.env.npm_config_user_agent) {\n    return undefined\n  }\n  return pmFromUserAgent(process.env.npm_config_user_agent)\n}\n\nfunction pmFromUserAgent (userAgent) {\n  const pmSpec = userAgent.split(' ')[0]\n  const separatorPos = pmSpec.lastIndexOf('/')\n  const name = pmSpec.substring(0, separatorPos)\n  return {\n    name: name === 'npminstall' ? 'cnpm' : name,\n    version: pmSpec.substring(separatorPos + 1)\n  }\n}\n", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.exports.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]/\nmodule.exports.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", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\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", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = 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        if (Array.isArray(value)) {\n            for (let i = 0; i < value.length; i++) {\n                const key = String(i)\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\n            }\n        } else {\n            for (const key in value) {\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\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            Object.defineProperty(parent, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true,\n            })\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", "const util = require('./util')\n\nmodule.exports = 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", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n    parse,\n    stringify,\n}\n\nmodule.exports = JSON5\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction getType(o) {\n    return Object.prototype.toString.call(o);\n}\nexports.getType = getType;\nfunction throwUnknownDataType(o) {\n    throw new TypeError('unsupported data type: ' + getType(o));\n}\nexports.throwUnknownDataType = throwUnknownDataType;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nlet i_to_s = '';\nfor (let i = 0; i < 10; i++) {\n    const c = String.fromCharCode(48 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + 32 + i);\n    i_to_s += c;\n}\nconst N = i_to_s.length;\nconst s_to_i = {};\nfor (let i = 0; i < N; i++) {\n    const s = i_to_s[i];\n    s_to_i[s] = i;\n}\nfunction s_to_int(s) {\n    let acc = 0;\n    let pow = 1;\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = s_to_i[c];\n        x *= pow;\n        acc += x;\n        pow *= N;\n    }\n    return acc;\n}\nexports.s_to_int = s_to_int;\nfunction s_to_big_int(s) {\n    let acc = BigInt(0);\n    let pow = BigInt(1);\n    const n = BigInt(N);\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = BigInt(s_to_i[c]);\n        x *= pow;\n        acc += x;\n        pow *= n;\n    }\n    return acc;\n}\nexports.s_to_big_int = s_to_big_int;\nfunction int_to_s(int) {\n    if (int === 0) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== 0) {\n        const i = int % N;\n        const c = i_to_s[i];\n        acc.push(c);\n        int -= i;\n        int /= N;\n    }\n    return acc.reverse().join('');\n}\nexports.int_to_s = int_to_s;\nfunction big_int_to_s(int) {\n    const zero = BigInt(0);\n    const n = BigInt(N);\n    if (int === zero) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== zero) {\n        const i = int % n;\n        const c = i_to_s[Number(i)];\n        acc.push(c);\n        int -= i;\n        int /= n;\n    }\n    return acc.reverse().join('');\n}\nexports.big_int_to_s = big_int_to_s;\nfunction reverse(s) {\n    return s.split('').reverse().join('');\n}\nfunction num_to_s(num) {\n    if (num < 0) {\n        return '-' + num_to_s(-num);\n    }\n    let [a, b] = num.toString().split('.');\n    if (!b) {\n        return int_to_s(num);\n    }\n    let c;\n    if (b) {\n        [b, c] = b.split('e');\n    }\n    a = int_str_to_s(a);\n    b = reverse(b);\n    b = int_str_to_s(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += '.';\n        switch (c[0]) {\n            case '+':\n                c = c.slice(1);\n                break;\n            case '-':\n                str += '-';\n                c = c.slice(1);\n                break;\n        }\n        c = reverse(c);\n        c = int_str_to_s(c);\n        str += c;\n    }\n    return str;\n}\nexports.num_to_s = num_to_s;\nfunction int_str_to_s(int_str) {\n    const num = +int_str;\n    if (num.toString() === int_str) {\n        return int_to_s(num);\n    }\n    return ':' + big_int_to_s(BigInt(int_str));\n}\nexports.int_str_to_s = int_str_to_s;\nfunction s_to_int_str(s) {\n    if (s[0] === ':') {\n        return s_to_big_int(s.substring(1)).toString();\n    }\n    return s_to_int(s).toString();\n}\nfunction s_to_num(s) {\n    if (s[0] === '-') {\n        return -s_to_num(s.substr(1));\n    }\n    let [a, b, c] = s.split('.');\n    if (!b) {\n        return s_to_int(a);\n    }\n    a = s_to_int_str(a);\n    b = s_to_int_str(b);\n    b = reverse(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += 'e';\n        let neg = false;\n        if (c[0] === '-') {\n            neg = true;\n            c = c.slice(1);\n        }\n        c = s_to_int_str(c);\n        c = reverse(c);\n        str += neg ? -c : +c;\n    }\n    return +str;\n}\nexports.s_to_num = s_to_num;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst number_1 = require(\"./number\");\nfunction encodeNum(num) {\n    const a = 'n|' + number_1.num_to_s(num);\n    return a;\n    // let b = num.toString()\n    // return a.length < b.length ? a : num\n}\nexports.encodeNum = encodeNum;\nfunction decodeNum(s) {\n    s = s.replace('n|', '');\n    return number_1.s_to_num(s);\n}\nexports.decodeNum = decodeNum;\nfunction decodeKey(key) {\n    return typeof key === 'number' ? key : number_1.s_to_int(key);\n}\nexports.decodeKey = decodeKey;\nfunction encodeBool(b) {\n    // return 'b|' + bool_to_s(b)\n    return b ? 'b|T' : 'b|F';\n}\nexports.encodeBool = encodeBool;\nfunction decodeBool(s) {\n    switch (s) {\n        case 'b|T':\n            return true;\n        case 'b|F':\n            return false;\n    }\n    return !!s;\n}\nexports.decodeBool = decodeBool;\nfunction encodeStr(str) {\n    const prefix = str[0] + str[1];\n    switch (prefix) {\n        case 'b|':\n        case 'o|':\n        case 'n|':\n        case 'a|':\n        case 's|':\n            str = 's|' + str;\n    }\n    return str;\n}\nexports.encodeStr = encodeStr;\nfunction decodeStr(s) {\n    const prefix = s[0] + s[1];\n    return prefix === 's|' ? s.substr(2) : s;\n}\nexports.decodeStr = decodeStr;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = {\n    sort_key: false,\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst config_1 = require(\"./config\");\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst number_1 = require(\"./number\");\nfunction memToValues(mem) {\n    return mem.store.toArray();\n}\nexports.memToValues = memToValues;\nfunction makeInMemoryStore() {\n    const mem = [];\n    return {\n        forEach(cb) {\n            for (let i = 0; i < mem.length; i++) {\n                if (cb(mem[i]) === 'break') {\n                    return;\n                }\n            }\n        },\n        add(value) {\n            mem.push(value);\n        },\n        toArray() {\n            return mem;\n        },\n    };\n}\nexports.makeInMemoryStore = makeInMemoryStore;\nfunction makeInMemoryCache() {\n    const valueMem = Object.create(null);\n    const schemaMem = Object.create(null);\n    return {\n        getValue(key) {\n            return valueMem[key];\n        },\n        getSchema(key) {\n            return schemaMem[key];\n        },\n        forEachValue(cb) {\n            for (const [key, value] of Object.entries(valueMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        forEachSchema(cb) {\n            for (const [key, value] of Object.entries(schemaMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        setValue(key, value) {\n            valueMem[key] = value;\n        },\n        setSchema(key, value) {\n            schemaMem[key] = value;\n        },\n        hasValue(key) {\n            return key in valueMem;\n        },\n        hasSchema(key) {\n            return key in schemaMem;\n        },\n    };\n}\nexports.makeInMemoryCache = makeInMemoryCache;\nfunction makeInMemoryMemory() {\n    return {\n        store: makeInMemoryStore(),\n        cache: makeInMemoryCache(),\n        keyCount: 0,\n    };\n}\nexports.makeInMemoryMemory = makeInMemoryMemory;\nfunction getValueKey(mem, value) {\n    if (mem.cache.hasValue(value)) {\n        return mem.cache.getValue(value);\n    }\n    const id = mem.keyCount++;\n    const key = number_1.num_to_s(id);\n    mem.store.add(value);\n    mem.cache.setValue(value, key);\n    return key;\n}\n/** @remark in-place sort the keys */\nfunction getSchema(mem, keys) {\n    if (config_1.config.sort_key) {\n        keys.sort();\n    }\n    const schema = keys.join(',');\n    if (mem.cache.hasSchema(schema)) {\n        return mem.cache.getSchema(schema);\n    }\n    const key_id = addValue(mem, keys, undefined);\n    mem.cache.setSchema(schema, key_id);\n    return key_id;\n}\nfunction addValue(mem, o, parent) {\n    if (o === null) {\n        return '';\n    }\n    switch (typeof o) {\n        case 'undefined':\n            if (Array.isArray(parent)) {\n                return addValue(mem, null, parent);\n            }\n            break;\n        case 'object':\n            if (o === null) {\n                return getValueKey(mem, null);\n            }\n            if (Array.isArray(o)) {\n                let acc = 'a';\n                for (let i = 0; i < o.length; i++) {\n                    const v = o[i];\n                    const key = v === null ? '_' : addValue(mem, v, o);\n                    acc += '|' + key;\n                }\n                if (acc === 'a') {\n                    acc = 'a|';\n                }\n                return getValueKey(mem, acc);\n            }\n            else {\n                const keys = Object.keys(o);\n                if (keys.length === 0) {\n                    return getValueKey(mem, 'o|');\n                }\n                let acc = 'o';\n                const key_id = getSchema(mem, keys);\n                acc += '|' + key_id;\n                for (const key of keys) {\n                    const value = o[key];\n                    const v = addValue(mem, value, o);\n                    acc += '|' + v;\n                }\n                return getValueKey(mem, acc);\n            }\n        case 'boolean':\n            return getValueKey(mem, encode_1.encodeBool(o));\n        case 'number':\n            return getValueKey(mem, encode_1.encodeNum(o));\n        case 'string':\n            return getValueKey(mem, encode_1.encodeStr(o));\n    }\n    return debug_1.throwUnknownDataType(o);\n}\nexports.addValue = addValue;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst memory_1 = require(\"./memory\");\nfunction compress(o) {\n    const mem = memory_1.makeInMemoryMemory();\n    const root = memory_1.addValue(mem, o, undefined);\n    const values = memory_1.memToValues(mem);\n    return [values, root];\n}\nexports.compress = compress;\nfunction decodeObject(values, s) {\n    if (s === 'o|') {\n        return {};\n    }\n    const o = {};\n    const vs = s.split('|');\n    const key_id = vs[1];\n    let keys = decode(values, key_id);\n    const n = vs.length;\n    if (n - 2 === 1 && !Array.isArray(keys)) {\n        // single-key object using existing value as key\n        keys = [keys];\n    }\n    for (let i = 2; i < n; i++) {\n        const k = keys[i - 2];\n        let v = vs[i];\n        v = decode(values, v);\n        o[k] = v;\n    }\n    return o;\n}\nfunction decodeArray(values, s) {\n    if (s === 'a|') {\n        return [];\n    }\n    const vs = s.split('|');\n    const n = vs.length - 1;\n    const xs = new Array(n);\n    for (let i = 0; i < n; i++) {\n        let v = vs[i + 1];\n        v = decode(values, v);\n        xs[i] = v;\n    }\n    return xs;\n}\nfunction decode(values, key) {\n    if (key === '' || key === '_') {\n        return null;\n    }\n    const id = encode_1.decodeKey(key);\n    const v = values[id];\n    if (v === null) {\n        return v;\n    }\n    switch (typeof v) {\n        case 'undefined':\n            return v;\n        case 'number':\n            return v;\n        case 'string':\n            const prefix = v[0] + v[1];\n            switch (prefix) {\n                case 'b|':\n                    return encode_1.decodeBool(v);\n                case 'o|':\n                    return decodeObject(values, v);\n                case 'n|':\n                    return encode_1.decodeNum(v);\n                case 'a|':\n                    return decodeArray(values, v);\n                default:\n                    return encode_1.decodeStr(v);\n            }\n    }\n    return debug_1.throwUnknownDataType(v);\n}\nexports.decode = decode;\nfunction decompress(c) {\n    const [values, root] = c;\n    return decode(values, root);\n}\nexports.decompress = decompress;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction trimUndefined(object) {\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n    }\n}\nexports.trimUndefined = trimUndefined;\nfunction trimUndefinedRecursively(object) {\n    trimUndefinedRecursivelyLoop(object, new Set());\n}\nexports.trimUndefinedRecursively = trimUndefinedRecursively;\nfunction trimUndefinedRecursivelyLoop(object, tracks) {\n    tracks.add(object);\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n        else {\n            const value = object[key];\n            if (value && typeof value === 'object' && !tracks.has(value)) {\n                trimUndefinedRecursivelyLoop(value, tracks);\n            }\n        }\n    }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* for direct usage */\nvar core_1 = require(\"./core\");\nexports.compress = core_1.compress;\nexports.decompress = core_1.decompress;\n/* for custom wrapper */\nvar core_2 = require(\"./core\");\nexports.decode = core_2.decode;\nvar memory_1 = require(\"./memory\");\nexports.addValue = memory_1.addValue;\n/* to remove undefined object fields */\nvar helpers_1 = require(\"./helpers\");\nexports.trimUndefined = helpers_1.trimUndefined;\nexports.trimUndefinedRecursively = helpers_1.trimUndefinedRecursively;\n", "'use strict';\n\nconst { FORCE_COLOR, NODE_DISABLE_COLORS, TERM } = process.env;\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && TERM !== 'dumb' && FORCE_COLOR !== '0',\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (str.includes(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\tthis.has.includes(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nmodule.exports = $;\n", "'use strict';\n\nmodule.exports = (key, isSelect) => {\n  if (key.meta && key.name !== 'escape') return;\n\n  if (key.ctrl) {\n    if (key.name === 'a') return 'first';\n    if (key.name === 'c') return 'abort';\n    if (key.name === 'd') return 'abort';\n    if (key.name === 'e') return 'last';\n    if (key.name === 'g') return 'reset';\n  }\n\n  if (isSelect) {\n    if (key.name === 'j') return 'down';\n    if (key.name === 'k') return 'up';\n  }\n\n  if (key.name === 'return') return 'submit';\n  if (key.name === 'enter') return 'submit'; // ctrl + J\n\n  if (key.name === 'backspace') return 'delete';\n  if (key.name === 'delete') return 'deleteForward';\n  if (key.name === 'abort') return 'abort';\n  if (key.name === 'escape') return 'exit';\n  if (key.name === 'tab') return 'next';\n  if (key.name === 'pagedown') return 'nextPage';\n  if (key.name === 'pageup') return 'prevPage'; // TODO create home() in prompt types (e.g. TextPrompt)\n\n  if (key.name === 'home') return 'home'; // TODO create end() in prompt types (e.g. TextPrompt)\n\n  if (key.name === 'end') return 'end';\n  if (key.name === 'up') return 'up';\n  if (key.name === 'down') return 'down';\n  if (key.name === 'right') return 'right';\n  if (key.name === 'left') return 'left';\n  return false;\n};", "'use strict';\n\nmodule.exports = str => {\n  const pattern = ['[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)', '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'].join('|');\n  const RGX = new RegExp(pattern, 'g');\n  return typeof str === 'string' ? str.replace(RGX, '') : str;\n};", "'use strict';\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nconst strip = require('./strip');\n\nconst _require = require('sisteransi'),\n      erase = _require.erase,\n      cursor = _require.cursor;\n\nconst width = str => [...strip(str)].length;\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\n\n\nmodule.exports = function (prompt, perLine) {\n  if (!perLine) return erase.line + cursor.to(0);\n  let rows = 0;\n  const lines = prompt.split(/\\r?\\n/);\n\n  var _iterator = _createForOfIteratorHelper(lines),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      let line = _step.value;\n      rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return erase.lines(rows);\n};", "'use strict';\n\nconst main = {\n  arrowUp: '\u2191',\n  arrowDown: '\u2193',\n  arrowLeft: '\u2190',\n  arrowRight: '\u2192',\n  radioOn: '\u25C9',\n  radioOff: '\u25EF',\n  tick: '\u2714',\n  cross: '\u2716',\n  ellipsis: '\u2026',\n  pointerSmall: '\u203A',\n  line: '\u2500',\n  pointer: '\u276F'\n};\nconst win = {\n  arrowUp: main.arrowUp,\n  arrowDown: main.arrowDown,\n  arrowLeft: main.arrowLeft,\n  arrowRight: main.arrowRight,\n  radioOn: '(*)',\n  radioOff: '( )',\n  tick: '\u221A',\n  cross: '\u00D7',\n  ellipsis: '...',\n  pointerSmall: '\u00BB',\n  line: '\u2500',\n  pointer: '>'\n};\nconst figures = process.platform === 'win32' ? win : main;\nmodule.exports = figures;", "'use strict';\n\nconst c = require('kleur');\n\nconst figures = require('./figures'); // rendering user input.\n\n\nconst styles = Object.freeze({\n  password: {\n    scale: 1,\n    render: input => '*'.repeat(input.length)\n  },\n  emoji: {\n    scale: 2,\n    render: input => '\uD83D\uDE03'.repeat(input.length)\n  },\n  invisible: {\n    scale: 0,\n    render: input => ''\n  },\n  default: {\n    scale: 1,\n    render: input => `${input}`\n  }\n});\n\nconst render = type => styles[type] || styles.default; // icon to signalize a prompt.\n\n\nconst symbols = Object.freeze({\n  aborted: c.red(figures.cross),\n  done: c.green(figures.tick),\n  exited: c.yellow(figures.cross),\n  default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) => aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default; // between the question and the user's input.\n\n\nconst delimiter = completing => c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) => c.gray(expandable ? expanded ? figures.pointerSmall : '+' : figures.line);\n\nmodule.exports = {\n  styles,\n  render,\n  symbols,\n  symbol,\n  delimiter,\n  item\n};", "'use strict';\n\nconst strip = require('./strip');\n/**\n * @param {string} msg\n * @param {number} perLine\n */\n\n\nmodule.exports = function (msg, perLine) {\n  let lines = String(strip(msg) || '').split(/\\r?\\n/);\n  if (!perLine) return lines.length;\n  return lines.map(l => Math.ceil(l.length / perLine)).reduce((a, b) => a + b);\n};", "'use strict';\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\n\nmodule.exports = (msg, opts = {}) => {\n  const tab = Number.isSafeInteger(parseInt(opts.margin)) ? new Array(parseInt(opts.margin)).fill(' ').join('') : opts.margin || '';\n  const width = opts.width;\n  return (msg || '').split(/\\r?\\n/g).map(line => line.split(/\\s+/g).reduce((arr, w) => {\n    if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width) arr[arr.length - 1] += ` ${w}`;else arr.push(`${tab}${w}`);\n    return arr;\n  }, [tab]).join('\\n')).join('\\n');\n};", "'use strict';\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\n\nmodule.exports = (cursor, total, maxVisible) => {\n  maxVisible = maxVisible || total;\n  let startIndex = Math.min(total - maxVisible, cursor - Math.floor(maxVisible / 2));\n  if (startIndex < 0) startIndex = 0;\n  let endIndex = Math.min(startIndex + maxVisible, total);\n  return {\n    startIndex,\n    endIndex\n  };\n};", "'use strict';\n\nmodule.exports = {\n  action: require('./action'),\n  clear: require('./clear'),\n  style: require('./style'),\n  strip: require('./strip'),\n  figures: require('./figures'),\n  lines: require('./lines'),\n  wrap: require('./wrap'),\n  entriesToDisplay: require('./entriesToDisplay')\n};", "'use strict';\n\nconst readline = require('readline');\n\nconst _require = require('../util'),\n      action = _require.action;\n\nconst EventEmitter = require('events');\n\nconst _require2 = require('sisteransi'),\n      beep = _require2.beep,\n      cursor = _require2.cursor;\n\nconst color = require('kleur');\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass Prompt extends EventEmitter {\n  constructor(opts = {}) {\n    super();\n    this.firstRender = true;\n    this.in = opts.stdin || process.stdin;\n    this.out = opts.stdout || process.stdout;\n\n    this.onRender = (opts.onRender || (() => void 0)).bind(this);\n\n    const rl = readline.createInterface({\n      input: this.in,\n      escapeCodeTimeout: 50\n    });\n    readline.emitKeypressEvents(this.in, rl);\n    if (this.in.isTTY) this.in.setRawMode(true);\n    const isSelect = ['SelectPrompt', 'MultiselectPrompt'].indexOf(this.constructor.name) > -1;\n\n    const keypress = (str, key) => {\n      let a = action(key, isSelect);\n\n      if (a === false) {\n        this._ && this._(str, key);\n      } else if (typeof this[a] === 'function') {\n        this[a](key);\n      } else {\n        this.bell();\n      }\n    };\n\n    this.close = () => {\n      this.out.write(cursor.show);\n      this.in.removeListener('keypress', keypress);\n      if (this.in.isTTY) this.in.setRawMode(false);\n      rl.close();\n      this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n      this.closed = true;\n    };\n\n    this.in.on('keypress', keypress);\n  }\n\n  fire() {\n    this.emit('state', {\n      value: this.value,\n      aborted: !!this.aborted,\n      exited: !!this.exited\n    });\n  }\n\n  bell() {\n    this.out.write(beep);\n  }\n\n  render() {\n    this.onRender(color);\n    if (this.firstRender) this.firstRender = false;\n  }\n\n}\n\nmodule.exports = Prompt;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n      erase = _require.erase,\n      cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n      style = _require2.style,\n      clear = _require2.clear,\n      lines = _require2.lines,\n      figures = _require2.figures;\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass TextPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.msg = opts.message;\n    this.initial = opts.initial || ``;\n\n    this.validator = opts.validate || (() => true);\n\n    this.value = ``;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.clear = clear(``, this.out.columns);\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && this.initial) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(this.initial));\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(v);\n    }\n\n    this._value = v;\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  reset() {\n    this.value = ``;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.value = this.value || this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.red = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  validate() {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      let valid = yield _this.validator(_this.value);\n\n      if (typeof valid === `string`) {\n        _this.errorMsg = valid;\n        valid = false;\n      }\n\n      _this.error = !valid;\n    })();\n  }\n\n  submit() {\n    var _this2 = this;\n\n    return _asyncToGenerator(function* () {\n      _this2.value = _this2.value || _this2.initial;\n      _this2.cursorOffset = 0;\n      _this2.cursor = _this2.rendered.length;\n      yield _this2.validate();\n\n      if (_this2.error) {\n        _this2.red = true;\n\n        _this2.fire();\n\n        _this2.render();\n\n        return;\n      }\n\n      _this2.done = true;\n      _this2.aborted = false;\n\n      _this2.fire();\n\n      _this2.render();\n\n      _this2.out.write('\\n');\n\n      _this2.close();\n    })();\n  }\n\n  next() {\n    if (!this.placeholder) return this.bell();\n    this.value = this.initial;\n    this.cursor = this.rendered.length;\n    this.fire();\n    this.render();\n  }\n\n  moveCursor(n) {\n    if (this.placeholder) return;\n    this.cursor = this.cursor + n;\n    this.cursorOffset += n;\n  }\n\n  _(c, key) {\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${c}${s2}`;\n    this.red = false;\n    this.cursor = this.placeholder ? 0 : s1.length + 1;\n    this.render();\n  }\n\n  delete() {\n    if (this.isCursorAtStart()) return this.bell();\n    let s1 = this.value.slice(0, this.cursor - 1);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n\n    if (this.isCursorAtStart()) {\n      this.cursorOffset = 0;\n    } else {\n      this.cursorOffset++;\n      this.moveCursor(-1);\n    }\n\n    this.render();\n  }\n\n  deleteForward() {\n    if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor + 1);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n\n    if (this.isCursorAtEnd()) {\n      this.cursorOffset = 0;\n    } else {\n      this.cursorOffset++;\n    }\n\n    this.render();\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length;\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0 || this.placeholder) return this.bell();\n    this.moveCursor(-1);\n    this.render();\n  }\n\n  right() {\n    if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    this.moveCursor(1);\n    this.render();\n  }\n\n  isCursorAtStart() {\n    return this.cursor === 0 || this.placeholder && this.cursor === 1;\n  }\n\n  isCursorAtEnd() {\n    return this.cursor === this.rendered.length || this.placeholder && this.cursor === this.rendered.length + 1;\n  }\n\n  render() {\n    if (this.closed) return;\n\n    if (!this.firstRender) {\n      if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n\n    super.render();\n    this.outputError = '';\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.red ? color.red(this.rendered) : this.rendered].join(` `);\n\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n  }\n\n}\n\nmodule.exports = TextPrompt;", "'use strict';\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear,\n      figures = _require.figures,\n      wrap = _require.wrap,\n      entriesToDisplay = _require.entriesToDisplay;\n\nconst _require2 = require('sisteransi'),\n      cursor = _require2.cursor;\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\n\n\nclass SelectPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n    this.warn = opts.warn || '- This option is disabled';\n    this.cursor = opts.initial || 0;\n    this.choices = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string') ch = {\n        title: ch,\n        value: idx\n      };\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        description: ch && ch.description,\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = (this.choices[this.cursor] || {}).value;\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  moveCursor(n) {\n    this.cursor = n;\n    this.value = this.choices[n].value;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(0);\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    if (!this.selection.disabled) {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    } else this.bell();\n  }\n\n  first() {\n    this.moveCursor(0);\n    this.render();\n  }\n\n  last() {\n    this.moveCursor(this.choices.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.moveCursor(this.choices.length - 1);\n    } else {\n      this.moveCursor(this.cursor - 1);\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.choices.length - 1) {\n      this.moveCursor(0);\n    } else {\n      this.moveCursor(this.cursor + 1);\n    }\n\n    this.render();\n  }\n\n  next() {\n    this.moveCursor((this.cursor + 1) % this.choices.length);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') return this.submit();\n  }\n\n  get selection() {\n    return this.choices[this.cursor];\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let _entriesToDisplay = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage),\n        startIndex = _entriesToDisplay.startIndex,\n        endIndex = _entriesToDisplay.endIndex; // Print prompt\n\n\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.done ? this.selection.title : this.selection.disabled ? color.yellow(this.warn) : color.gray(this.hint)].join(' '); // Print choices\n\n    if (!this.done) {\n      this.outputText += '\\n';\n\n      for (let i = startIndex; i < endIndex; i++) {\n        let title,\n            prefix,\n            desc = '',\n            v = this.choices[i]; // Determine whether to display \"more choices\" indicators\n\n        if (i === startIndex && startIndex > 0) {\n          prefix = figures.arrowUp;\n        } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n          prefix = figures.arrowDown;\n        } else {\n          prefix = ' ';\n        }\n\n        if (v.disabled) {\n          title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n          prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : '  ') + prefix;\n        } else {\n          title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n          prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n\n          if (v.description && this.cursor === i) {\n            desc = ` - ${v.description}`;\n\n            if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n              desc = '\\n' + wrap(v.description, {\n                margin: 3,\n                width: this.out.columns\n              });\n            }\n          }\n        }\n\n        this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n      }\n    }\n\n    this.out.write(this.outputText);\n  }\n\n}\n\nmodule.exports = SelectPrompt;", "\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n      cursor = _require2.cursor,\n      erase = _require2.erase;\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass TogglePrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = !!opts.initial;\n    this.active = opts.active || 'on';\n    this.inactive = opts.inactive || 'off';\n    this.initialValue = this.value;\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  deactivate() {\n    if (this.value === false) return this.bell();\n    this.value = false;\n    this.render();\n  }\n\n  activate() {\n    if (this.value === true) return this.bell();\n    this.value = true;\n    this.render();\n  }\n\n  delete() {\n    this.deactivate();\n  }\n\n  left() {\n    this.deactivate();\n  }\n\n  right() {\n    this.activate();\n  }\n\n  down() {\n    this.deactivate();\n  }\n\n  up() {\n    this.activate();\n  }\n\n  next() {\n    this.value = !this.value;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.value = !this.value;\n    } else if (c === '1') {\n      this.value = true;\n    } else if (c === '0') {\n      this.value = false;\n    } else return this.bell();\n\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.value ? this.inactive : color.cyan().underline(this.inactive), color.gray('/'), this.value ? color.cyan().underline(this.active) : this.active].join(' ');\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = TogglePrompt;", "'use strict';\n\nclass DatePart {\n  constructor({\n    token,\n    date,\n    parts,\n    locales\n  }) {\n    this.token = token;\n    this.date = date || new Date();\n    this.parts = parts || [this];\n    this.locales = locales || {};\n  }\n\n  up() {}\n\n  down() {}\n\n  next() {\n    const currentIdx = this.parts.indexOf(this);\n    return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  setTo(val) {}\n\n  prev() {\n    let parts = [].concat(this.parts).reverse();\n    const currentIdx = parts.indexOf(this);\n    return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  toString() {\n    return String(this.date);\n  }\n\n}\n\nmodule.exports = DatePart;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours((this.date.getHours() + 12) % 24);\n  }\n\n  down() {\n    this.up();\n  }\n\n  toString() {\n    let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n    return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n  }\n\n}\n\nmodule.exports = Meridiem;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n  n = n % 10;\n  return n === 1 ? 'st' : n === 2 ? 'nd' : n === 3 ? 'rd' : 'th';\n};\n\nclass Day extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setDate(this.date.getDate() + 1);\n  }\n\n  down() {\n    this.date.setDate(this.date.getDate() - 1);\n  }\n\n  setTo(val) {\n    this.date.setDate(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let date = this.date.getDate();\n    let day = this.date.getDay();\n    return this.token === 'DD' ? String(date).padStart(2, '0') : this.token === 'Do' ? date + pos(date) : this.token === 'd' ? day + 1 : this.token === 'ddd' ? this.locales.weekdaysShort[day] : this.token === 'dddd' ? this.locales.weekdays[day] : date;\n  }\n\n}\n\nmodule.exports = Day;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours(this.date.getHours() + 1);\n  }\n\n  down() {\n    this.date.setHours(this.date.getHours() - 1);\n  }\n\n  setTo(val) {\n    this.date.setHours(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let hours = this.date.getHours();\n    if (/h/.test(this.token)) hours = hours % 12 || 12;\n    return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n  }\n\n}\n\nmodule.exports = Hours;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n  }\n\n  down() {\n    this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMilliseconds(parseInt(val.substr(-this.token.length)));\n  }\n\n  toString() {\n    return String(this.date.getMilliseconds()).padStart(4, '0').substr(0, this.token.length);\n  }\n\n}\n\nmodule.exports = Milliseconds;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMinutes(this.date.getMinutes() + 1);\n  }\n\n  down() {\n    this.date.setMinutes(this.date.getMinutes() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMinutes(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let m = this.date.getMinutes();\n    return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n  }\n\n}\n\nmodule.exports = Minutes;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMonth(this.date.getMonth() + 1);\n  }\n\n  down() {\n    this.date.setMonth(this.date.getMonth() - 1);\n  }\n\n  setTo(val) {\n    val = parseInt(val.substr(-2)) - 1;\n    this.date.setMonth(val < 0 ? 0 : val);\n  }\n\n  toString() {\n    let month = this.date.getMonth();\n    let tl = this.token.length;\n    return tl === 2 ? String(month + 1).padStart(2, '0') : tl === 3 ? this.locales.monthsShort[month] : tl === 4 ? this.locales.months[month] : String(month + 1);\n  }\n\n}\n\nmodule.exports = Month;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setSeconds(this.date.getSeconds() + 1);\n  }\n\n  down() {\n    this.date.setSeconds(this.date.getSeconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setSeconds(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let s = this.date.getSeconds();\n    return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n  }\n\n}\n\nmodule.exports = Seconds;", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n  constructor(opts = {}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setFullYear(this.date.getFullYear() + 1);\n  }\n\n  down() {\n    this.date.setFullYear(this.date.getFullYear() - 1);\n  }\n\n  setTo(val) {\n    this.date.setFullYear(val.substr(-4));\n  }\n\n  toString() {\n    let year = String(this.date.getFullYear()).padStart(4, '0');\n    return this.token.length === 2 ? year.substr(-2) : year;\n  }\n\n}\n\nmodule.exports = Year;", "'use strict';\n\nmodule.exports = {\n  DatePart: require('./datepart'),\n  Meridiem: require('./meridiem'),\n  Day: require('./day'),\n  Hours: require('./hours'),\n  Milliseconds: require('./milliseconds'),\n  Minutes: require('./minutes'),\n  Month: require('./month'),\n  Seconds: require('./seconds'),\n  Year: require('./year')\n};", "'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear,\n      figures = _require.figures;\n\nconst _require2 = require('sisteransi'),\n      erase = _require2.erase,\n      cursor = _require2.cursor;\n\nconst _require3 = require('../dateparts'),\n      DatePart = _require3.DatePart,\n      Meridiem = _require3.Meridiem,\n      Day = _require3.Day,\n      Hours = _require3.Hours,\n      Milliseconds = _require3.Milliseconds,\n      Minutes = _require3.Minutes,\n      Month = _require3.Month,\n      Seconds = _require3.Seconds,\n      Year = _require3.Year;\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n  1: ({\n    token\n  }) => token.replace(/\\\\(.)/g, '$1'),\n  2: opts => new Day(opts),\n  // Day // TODO\n  3: opts => new Month(opts),\n  // Month\n  4: opts => new Year(opts),\n  // Year\n  5: opts => new Meridiem(opts),\n  // AM/PM // TODO (special)\n  6: opts => new Hours(opts),\n  // Hours\n  7: opts => new Minutes(opts),\n  // Minutes\n  8: opts => new Seconds(opts),\n  // Seconds\n  9: opts => new Milliseconds(opts) // Fractional seconds\n\n};\nconst dfltLocales = {\n  months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n  monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n  weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n  weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n};\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\nclass DatePrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = 0;\n    this.typed = '';\n    this.locales = Object.assign(dfltLocales, opts.locales);\n    this._date = opts.initial || new Date();\n    this.errorMsg = opts.error || 'Please Enter A Valid Value';\n\n    this.validator = opts.validate || (() => true);\n\n    this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  get value() {\n    return this.date;\n  }\n\n  get date() {\n    return this._date;\n  }\n\n  set date(date) {\n    if (date) this._date.setTime(date.getTime());\n  }\n\n  set mask(mask) {\n    let result;\n    this.parts = [];\n\n    while (result = regex.exec(mask)) {\n      let match = result.shift();\n      let idx = result.findIndex(gr => gr != null);\n      this.parts.push(idx in regexGroups ? regexGroups[idx]({\n        token: result[idx] || match,\n        date: this.date,\n        parts: this.parts,\n        locales: this.locales\n      }) : result[idx] || match);\n    }\n\n    let parts = this.parts.reduce((arr, i) => {\n      if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string') arr[arr.length - 1] += i;else arr.push(i);\n      return arr;\n    }, []);\n    this.parts.splice(0);\n    this.parts.push(...parts);\n    this.reset();\n  }\n\n  moveCursor(n) {\n    this.typed = '';\n    this.cursor = n;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  validate() {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      let valid = yield _this.validator(_this.value);\n\n      if (typeof valid === 'string') {\n        _this.errorMsg = valid;\n        valid = false;\n      }\n\n      _this.error = !valid;\n    })();\n  }\n\n  submit() {\n    var _this2 = this;\n\n    return _asyncToGenerator(function* () {\n      yield _this2.validate();\n\n      if (_this2.error) {\n        _this2.color = 'red';\n\n        _this2.fire();\n\n        _this2.render();\n\n        return;\n      }\n\n      _this2.done = true;\n      _this2.aborted = false;\n\n      _this2.fire();\n\n      _this2.render();\n\n      _this2.out.write('\\n');\n\n      _this2.close();\n    })();\n  }\n\n  up() {\n    this.typed = '';\n    this.parts[this.cursor].up();\n    this.render();\n  }\n\n  down() {\n    this.typed = '';\n    this.parts[this.cursor].down();\n    this.render();\n  }\n\n  left() {\n    let prev = this.parts[this.cursor].prev();\n    if (prev == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(prev));\n    this.render();\n  }\n\n  right() {\n    let next = this.parts[this.cursor].next();\n    if (next == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(next));\n    this.render();\n  }\n\n  next() {\n    let next = this.parts[this.cursor].next();\n    this.moveCursor(next ? this.parts.indexOf(next) : this.parts.findIndex(part => part instanceof DatePart));\n    this.render();\n  }\n\n  _(c) {\n    if (/\\d/.test(c)) {\n      this.typed += c;\n      this.parts[this.cursor].setTo(this.typed);\n      this.render();\n    }\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render(); // Print prompt\n\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), []).join('')].join(' '); // Print error\n\n    if (this.error) {\n      this.outputText += this.errorMsg.split('\\n').reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = DatePrompt;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n      cursor = _require.cursor,\n      erase = _require.erase;\n\nconst _require2 = require('../util'),\n      style = _require2.style,\n      figures = _require2.figures,\n      clear = _require2.clear,\n      lines = _require2.lines;\n\nconst isNumber = /[0-9]/;\n\nconst isDef = any => any !== undefined;\n\nconst round = (number, precision) => {\n  let factor = Math.pow(10, precision);\n  return Math.round(number * factor) / factor;\n};\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass NumberPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.msg = opts.message;\n    this.initial = isDef(opts.initial) ? opts.initial : '';\n    this.float = !!opts.float;\n    this.round = opts.round || 2;\n    this.inc = opts.increment || 1;\n    this.min = isDef(opts.min) ? opts.min : -Infinity;\n    this.max = isDef(opts.max) ? opts.max : Infinity;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n\n    this.validator = opts.validate || (() => true);\n\n    this.color = `cyan`;\n    this.value = ``;\n    this.typed = ``;\n    this.lastHit = 0;\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && v !== 0) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(`${this.initial}`));\n      this._value = ``;\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(`${round(v, this.round)}`);\n      this._value = round(v, this.round);\n    }\n\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  parse(x) {\n    return this.float ? parseFloat(x) : parseInt(x);\n  }\n\n  valid(c) {\n    return c === `-` || c === `.` && this.float || isNumber.test(c);\n  }\n\n  reset() {\n    this.typed = ``;\n    this.value = ``;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    let x = this.value;\n    this.value = x !== `` ? x : this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write(`\\n`);\n    this.close();\n  }\n\n  validate() {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      let valid = yield _this.validator(_this.value);\n\n      if (typeof valid === `string`) {\n        _this.errorMsg = valid;\n        valid = false;\n      }\n\n      _this.error = !valid;\n    })();\n  }\n\n  submit() {\n    var _this2 = this;\n\n    return _asyncToGenerator(function* () {\n      yield _this2.validate();\n\n      if (_this2.error) {\n        _this2.color = `red`;\n\n        _this2.fire();\n\n        _this2.render();\n\n        return;\n      }\n\n      let x = _this2.value;\n      _this2.value = x !== `` ? x : _this2.initial;\n      _this2.done = true;\n      _this2.aborted = false;\n      _this2.error = false;\n\n      _this2.fire();\n\n      _this2.render();\n\n      _this2.out.write(`\\n`);\n\n      _this2.close();\n    })();\n  }\n\n  up() {\n    this.typed = ``;\n\n    if (this.value === '') {\n      this.value = this.min - this.inc;\n    }\n\n    if (this.value >= this.max) return this.bell();\n    this.value += this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  down() {\n    this.typed = ``;\n\n    if (this.value === '') {\n      this.value = this.min + this.inc;\n    }\n\n    if (this.value <= this.min) return this.bell();\n    this.value -= this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  delete() {\n    let val = this.value.toString();\n    if (val.length === 0) return this.bell();\n    this.value = this.parse(val = val.slice(0, -1)) || ``;\n\n    if (this.value !== '' && this.value < this.min) {\n      this.value = this.min;\n    }\n\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  next() {\n    this.value = this.initial;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (!this.valid(c)) return this.bell();\n    const now = Date.now();\n    if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n\n    this.typed += c;\n    this.lastHit = now;\n    this.color = `cyan`;\n    if (c === `.`) return this.fire();\n    this.value = Math.min(this.parse(this.typed), this.max);\n    if (this.value > this.max) this.value = this.max;\n    if (this.value < this.min) this.value = this.min;\n    this.fire();\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n\n    if (!this.firstRender) {\n      if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n\n    super.render();\n    this.outputError = ''; // Print prompt\n\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), !this.done || !this.done && !this.placeholder ? color[this.color]().underline(this.rendered) : this.rendered].join(` `); // Print error\n\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n  }\n\n}\n\nmodule.exports = NumberPrompt;", "'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n      cursor = _require.cursor;\n\nconst Prompt = require('./prompt');\n\nconst _require2 = require('../util'),\n      clear = _require2.clear,\n      figures = _require2.figures,\n      style = _require2.style,\n      wrap = _require2.wrap,\n      entriesToDisplay = _require2.entriesToDisplay;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass MultiselectPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = opts.cursor || 0;\n    this.scrollIndex = opts.cursor || 0;\n    this.hint = opts.hint || '';\n    this.warn = opts.warn || '- This option is disabled -';\n    this.minSelected = opts.min;\n    this.showMinError = false;\n    this.maxChoices = opts.max;\n    this.instructions = opts.instructions;\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string') ch = {\n        title: ch,\n        value: idx\n      };\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        description: ch && ch.description,\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.clear = clear('', this.out.columns);\n\n    if (!opts.overrideRender) {\n      this.render();\n    }\n  }\n\n  reset() {\n    this.value.map(v => !v.selected);\n    this.cursor = 0;\n    this.fire();\n    this.render();\n  }\n\n  selected() {\n    return this.value.filter(v => v.selected);\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    const selected = this.value.filter(e => e.selected);\n\n    if (this.minSelected && selected.length < this.minSelected) {\n      this.showMinError = true;\n      this.render();\n    } else {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length - 1;\n    this.render();\n  }\n\n  next() {\n    this.cursor = (this.cursor + 1) % this.value.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.value.length - 1;\n    } else {\n      this.cursor--;\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.value.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n\n    this.render();\n  }\n\n  left() {\n    this.value[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.value[this.cursor].selected = true;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.value[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  toggleAll() {\n    if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n      return this.bell();\n    }\n\n    const newSelected = !this.value[this.cursor].selected;\n    this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else if (c === 'a') {\n      this.toggleAll();\n    } else {\n      return this.bell();\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n\n      return '\\nInstructions:\\n' + `    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n` + `    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n` + (this.maxChoices === undefined ? `    a: Toggle all\\n` : '') + `    enter/return: Complete answer`;\n    }\n\n    return '';\n  }\n\n  renderOption(cursor, v, i, arrowIndicator) {\n    const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n    let title, desc;\n\n    if (v.disabled) {\n      title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n    } else {\n      title = cursor === i ? color.cyan().underline(v.title) : v.title;\n\n      if (cursor === i && v.description) {\n        desc = ` - ${v.description}`;\n\n        if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n          desc = '\\n' + wrap(v.description, {\n            margin: prefix.length,\n            width: this.out.columns\n          });\n        }\n      }\n    }\n\n    return prefix + title + color.gray(desc || '');\n  } // shared with autocompleteMultiselect\n\n\n  paginateOptions(options) {\n    if (options.length === 0) {\n      return color.red('No matches for this query.');\n    }\n\n    let _entriesToDisplay = entriesToDisplay(this.cursor, options.length, this.optionsPerPage),\n        startIndex = _entriesToDisplay.startIndex,\n        endIndex = _entriesToDisplay.endIndex;\n\n    let prefix,\n        styledOptions = [];\n\n    for (let i = startIndex; i < endIndex; i++) {\n      if (i === startIndex && startIndex > 0) {\n        prefix = figures.arrowUp;\n      } else if (i === endIndex - 1 && endIndex < options.length) {\n        prefix = figures.arrowDown;\n      } else {\n        prefix = ' ';\n      }\n\n      styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n    }\n\n    return '\\n' + styledOptions.join('\\n');\n  } // shared with autocomleteMultiselect\n\n\n  renderOptions(options) {\n    if (!this.done) {\n      return this.paginateOptions(options);\n    }\n\n    return '';\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions()];\n\n    if (this.value[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render(); // print prompt\n\n    let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n\n    prompt += this.renderOptions(this.value);\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n\n}\n\nmodule.exports = MultiselectPrompt;", "'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n      erase = _require.erase,\n      cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n      style = _require2.style,\n      clear = _require2.clear,\n      figures = _require2.figures,\n      wrap = _require2.wrap,\n      entriesToDisplay = _require2.entriesToDisplay;\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\n\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\n\nconst getIndex = (arr, valOrTitle) => {\n  const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n  return index > -1 ? index : undefined;\n};\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\n\n\nclass AutocompletePrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.suggest = opts.suggest;\n    this.choices = opts.choices;\n    this.initial = typeof opts.initial === 'number' ? opts.initial : getIndex(opts.choices, opts.initial);\n    this.select = this.initial || opts.cursor || 0;\n    this.i18n = {\n      noMatches: opts.noMatches || 'no matches found'\n    };\n    this.fallback = opts.fallback || this.initial;\n    this.clearFirst = opts.clearFirst || false;\n    this.suggestions = [];\n    this.input = '';\n    this.limit = opts.limit || 10;\n    this.cursor = 0;\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.render = this.render.bind(this);\n    this.complete = this.complete.bind(this);\n    this.clear = clear('', this.out.columns);\n    this.complete(this.render);\n    this.render();\n  }\n\n  set fallback(fb) {\n    this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n  }\n\n  get fallback() {\n    let choice;\n    if (typeof this._fb === 'number') choice = this.choices[this._fb];else if (typeof this._fb === 'string') choice = {\n      title: this._fb\n    };\n    return choice || this._fb || {\n      title: this.i18n.noMatches\n    };\n  }\n\n  moveSelect(i) {\n    this.select = i;\n    if (this.suggestions.length > 0) this.value = getVal(this.suggestions, i);else this.value = this.fallback.value;\n    this.fire();\n  }\n\n  complete(cb) {\n    var _this = this;\n\n    return _asyncToGenerator(function* () {\n      const p = _this.completing = _this.suggest(_this.input, _this.choices);\n\n      const suggestions = yield p;\n      if (_this.completing !== p) return;\n      _this.suggestions = suggestions.map((s, i, arr) => ({\n        title: getTitle(arr, i),\n        value: getVal(arr, i),\n        description: s.description\n      }));\n      _this.completing = false;\n      const l = Math.max(suggestions.length - 1, 0);\n\n      _this.moveSelect(Math.min(l, _this.select));\n\n      cb && cb();\n    })();\n  }\n\n  reset() {\n    this.input = '';\n    this.complete(() => {\n      this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n      this.render();\n    });\n    this.render();\n  }\n\n  exit() {\n    if (this.clearFirst && this.input.length > 0) {\n      this.reset();\n    } else {\n      this.done = this.exited = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${c}${s2}`;\n    this.cursor = s1.length + 1;\n    this.complete(this.render);\n    this.render();\n  }\n\n  delete() {\n    if (this.cursor === 0) return this.bell();\n    let s1 = this.input.slice(0, this.cursor - 1);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.cursor = this.cursor - 1;\n    this.render();\n  }\n\n  deleteForward() {\n    if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor + 1);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.render();\n  }\n\n  first() {\n    this.moveSelect(0);\n    this.render();\n  }\n\n  last() {\n    this.moveSelect(this.suggestions.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.select === 0) {\n      this.moveSelect(this.suggestions.length - 1);\n    } else {\n      this.moveSelect(this.select - 1);\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else {\n      this.moveSelect(this.select + 1);\n    }\n\n    this.render();\n  }\n\n  next() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else this.moveSelect(this.select + 1);\n\n    this.render();\n  }\n\n  nextPage() {\n    this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n    this.render();\n  }\n\n  prevPage() {\n    this.moveSelect(Math.max(this.select - this.limit, 0));\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0) return this.bell();\n    this.cursor = this.cursor - 1;\n    this.render();\n  }\n\n  right() {\n    if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n    this.cursor = this.cursor + 1;\n    this.render();\n  }\n\n  renderOption(v, hovered, isStart, isEnd) {\n    let desc;\n    let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n    let title = hovered ? color.cyan().underline(v.title) : v.title;\n    prefix = (hovered ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n\n    if (v.description) {\n      desc = ` - ${v.description}`;\n\n      if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n        desc = '\\n' + wrap(v.description, {\n          margin: 3,\n          width: this.out.columns\n        });\n      }\n    }\n\n    return prefix + ' ' + title + color.gray(desc || '');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let _entriesToDisplay = entriesToDisplay(this.select, this.choices.length, this.limit),\n        startIndex = _entriesToDisplay.startIndex,\n        endIndex = _entriesToDisplay.endIndex;\n\n    this.outputText = [style.symbol(this.done, this.aborted, this.exited), color.bold(this.msg), style.delimiter(this.completing), this.done && this.suggestions[this.select] ? this.suggestions[this.select].title : this.rendered = this.transform.render(this.input)].join(' ');\n\n    if (!this.done) {\n      const suggestions = this.suggestions.slice(startIndex, endIndex).map((item, i) => this.renderOption(item, this.select === i + startIndex, i === 0 && startIndex > 0, i + startIndex === endIndex - 1 && endIndex < this.choices.length)).join('\\n');\n      this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = AutocompletePrompt;", "'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n      cursor = _require.cursor;\n\nconst MultiselectPrompt = require('./multiselect');\n\nconst _require2 = require('../util'),\n      clear = _require2.clear,\n      style = _require2.style,\n      figures = _require2.figures;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n  constructor(opts = {}) {\n    opts.overrideRender = true;\n    super(opts);\n    this.inputValue = '';\n    this.clear = clear('', this.out.columns);\n    this.filteredOptions = this.value;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.filteredOptions.length - 1;\n    this.render();\n  }\n\n  next() {\n    this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.filteredOptions.length - 1;\n    } else {\n      this.cursor--;\n    }\n\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.filteredOptions.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n\n    this.render();\n  }\n\n  left() {\n    this.filteredOptions[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.filteredOptions[this.cursor].selected = true;\n    this.render();\n  }\n\n  delete() {\n    if (this.inputValue.length) {\n      this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n      this.updateFilteredOptions();\n    }\n  }\n\n  updateFilteredOptions() {\n    const currentHighlight = this.filteredOptions[this.cursor];\n    this.filteredOptions = this.value.filter(v => {\n      if (this.inputValue) {\n        if (typeof v.title === 'string') {\n          if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n            return true;\n          }\n        }\n\n        if (typeof v.value === 'string') {\n          if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n            return true;\n          }\n        }\n\n        return false;\n      }\n\n      return true;\n    });\n    const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight);\n    this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.filteredOptions[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  handleInputChange(c) {\n    this.inputValue = this.inputValue + c;\n    this.updateFilteredOptions();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else {\n      this.handleInputChange(c);\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n\n      return `\nInstructions:\n    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n    [a,b,c]/delete: Filter choices\n    enter/return: Complete answer\n`;\n    }\n\n    return '';\n  }\n\n  renderCurrentInput() {\n    return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n  }\n\n  renderOption(cursor, v, i) {\n    let title;\n    if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n    return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + '  ' + title;\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n    if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render(); // print prompt\n\n    let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n\n    prompt += this.renderOptions(this.filteredOptions);\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;", "\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n      style = _require.style,\n      clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n      erase = _require2.erase,\n      cursor = _require2.cursor;\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\n\n\nclass ConfirmPrompt extends Prompt {\n  constructor(opts = {}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = opts.initial;\n    this.initialValue = !!opts.initial;\n    this.yesMsg = opts.yes || 'yes';\n    this.yesOption = opts.yesOption || '(Y/n)';\n    this.noMsg = opts.no || 'no';\n    this.noOption = opts.noOption || '(y/N)';\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.value = this.value || false;\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    if (c.toLowerCase() === 'y') {\n      this.value = true;\n      return this.submit();\n    }\n\n    if (c.toLowerCase() === 'n') {\n      this.value = false;\n      return this.submit();\n    }\n\n    return this.bell();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.done ? this.value ? this.yesMsg : this.noMsg : color.gray(this.initialValue ? this.yesOption : this.noOption)].join(' ');\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n\n}\n\nmodule.exports = ConfirmPrompt;", "'use strict';\n\nmodule.exports = {\n  TextPrompt: require('./text'),\n  SelectPrompt: require('./select'),\n  TogglePrompt: require('./toggle'),\n  DatePrompt: require('./date'),\n  NumberPrompt: require('./number'),\n  MultiselectPrompt: require('./multiselect'),\n  AutocompletePrompt: require('./autocomplete'),\n  AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n  ConfirmPrompt: require('./confirm')\n};", "'use strict';\n\nconst $ = exports;\n\nconst el = require('./elements');\n\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts = {}) {\n  return new Promise((res, rej) => {\n    const p = new el[type](args);\n    const onAbort = opts.onAbort || noop;\n    const onSubmit = opts.onSubmit || noop;\n    const onExit = opts.onExit || noop;\n    p.on('state', args.onState || noop);\n    p.on('submit', x => res(onSubmit(x)));\n    p.on('exit', x => res(onExit(x)));\n    p.on('abort', x => rej(onAbort(x)));\n  });\n}\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.text = args => toPrompt('TextPrompt', args);\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.password = args => {\n  args.style = 'password';\n  return $.text(args);\n};\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.invisible = args => {\n  args.style = 'invisible';\n  return $.text(args);\n};\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.number = args => toPrompt('NumberPrompt', args);\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.date = args => toPrompt('DatePrompt', args);\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n\n\n$.list = args => {\n  const sep = args.separator || ',';\n  return toPrompt('TextPrompt', args, {\n    onSubmit: str => str.split(sep).map(s => s.trim())\n  });\n};\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.toggle = args => toPrompt('TogglePrompt', args);\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.select = args => toPrompt('SelectPrompt', args);\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.multiselect = args => {\n  args.choices = [].concat(args.choices || []);\n\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n  return toPrompt('MultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\n$.autocompleteMultiselect = args => {\n  args.choices = [].concat(args.choices || []);\n\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n  return toPrompt('AutocompleteMultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase()));\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.autocomplete = args => {\n  args.suggest = args.suggest || byTitle;\n  args.choices = [].concat(args.choices || []);\n  return toPrompt('AutocompletePrompt', args);\n};", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\n\nconst noop = () => {};\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\n\n\nfunction prompt() {\n  return _prompt.apply(this, arguments);\n}\n\nfunction _prompt() {\n  _prompt = _asyncToGenerator(function* (questions = [], {\n    onSubmit = noop,\n    onCancel = noop\n  } = {}) {\n    const answers = {};\n    const override = prompt._override || {};\n    questions = [].concat(questions);\n    let answer, question, quit, name, type, lastPrompt;\n\n    const getFormattedAnswer = /*#__PURE__*/function () {\n      var _ref = _asyncToGenerator(function* (question, answer, skipValidation = false) {\n        if (!skipValidation && question.validate && question.validate(answer) !== true) {\n          return;\n        }\n\n        return question.format ? yield question.format(answer, answers) : answer;\n      });\n\n      return function getFormattedAnswer(_x, _x2) {\n        return _ref.apply(this, arguments);\n      };\n    }();\n\n    var _iterator = _createForOfIteratorHelper(questions),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        question = _step.value;\n        var _question = question;\n        name = _question.name;\n        type = _question.type;\n\n        // evaluate type first and skip if type is a falsy value\n        if (typeof type === 'function') {\n          type = yield type(answer, _objectSpread({}, answers), question);\n          question['type'] = type;\n        }\n\n        if (!type) continue; // if property is a function, invoke it unless it's a special function\n\n        for (let key in question) {\n          if (passOn.includes(key)) continue;\n          let value = question[key];\n          question[key] = typeof value === 'function' ? yield value(answer, _objectSpread({}, answers), lastPrompt) : value;\n        }\n\n        lastPrompt = question;\n\n        if (typeof question.message !== 'string') {\n          throw new Error('prompt message is required');\n        } // update vars in case they changed\n\n\n        var _question2 = question;\n        name = _question2.name;\n        type = _question2.type;\n\n        if (prompts[type] === void 0) {\n          throw new Error(`prompt type (${type}) is not defined`);\n        }\n\n        if (override[question.name] !== undefined) {\n          answer = yield getFormattedAnswer(question, override[question.name]);\n\n          if (answer !== undefined) {\n            answers[name] = answer;\n            continue;\n          }\n        }\n\n        try {\n          // Get the injected answer if there is one or prompt the user\n          answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : yield prompts[type](question);\n          answers[name] = answer = yield getFormattedAnswer(question, answer, true);\n          quit = yield onSubmit(question, answer, answers);\n        } catch (err) {\n          quit = !(yield onCancel(question, answers));\n        }\n\n        if (quit) return answers;\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    return answers;\n  });\n  return _prompt.apply(this, arguments);\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n  const answer = injected.shift();\n\n  if (answer instanceof Error) {\n    throw answer;\n  }\n\n  return answer === undefined ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n  prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n  prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, {\n  prompt,\n  prompts,\n  inject,\n  override\n});", "'use strict';\n\nmodule.exports = (key, isSelect) => {\n  if (key.meta && key.name !== 'escape') return;\n  \n  if (key.ctrl) {\n    if (key.name === 'a') return 'first';\n    if (key.name === 'c') return 'abort';\n    if (key.name === 'd') return 'abort';\n    if (key.name === 'e') return 'last';\n    if (key.name === 'g') return 'reset';\n  }\n  \n  if (isSelect) {\n    if (key.name === 'j') return 'down';\n    if (key.name === 'k') return 'up';\n  }\n\n  if (key.name === 'return') return 'submit';\n  if (key.name === 'enter') return 'submit'; // ctrl + J\n  if (key.name === 'backspace') return 'delete';\n  if (key.name === 'delete') return 'deleteForward';\n  if (key.name === 'abort') return 'abort';\n  if (key.name === 'escape') return 'exit';\n  if (key.name === 'tab') return 'next';\n  if (key.name === 'pagedown') return 'nextPage';\n  if (key.name === 'pageup') return 'prevPage';\n  // TODO create home() in prompt types (e.g. TextPrompt)\n  if (key.name === 'home') return 'home';\n  // TODO create end() in prompt types (e.g. TextPrompt)\n  if (key.name === 'end') return 'end';\n\n  if (key.name === 'up') return 'up';\n  if (key.name === 'down') return 'down';\n  if (key.name === 'right') return 'right';\n  if (key.name === 'left') return 'left';\n\n  return false;\n};\n", "'use strict';\n\nmodule.exports = str => {\n  const pattern = [\n    '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n    '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n  ].join('|');\n\n  const RGX = new RegExp(pattern, 'g');\n  return typeof str === 'string' ? str.replace(RGX, '') : str;\n};\n", "'use strict';\n\nconst strip = require('./strip');\nconst { erase, cursor } = require('sisteransi');\n\nconst width = str => [...strip(str)].length;\n\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\nmodule.exports = function(prompt, perLine) {\n  if (!perLine) return erase.line + cursor.to(0);\n\n  let rows = 0;\n  const lines = prompt.split(/\\r?\\n/);\n  for (let line of lines) {\n    rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n  }\n\n  return erase.lines(rows);\n};\n", "'use strict';\t\n\n const main = {\n  arrowUp: '\u2191',\n  arrowDown: '\u2193',\n  arrowLeft: '\u2190',\n  arrowRight: '\u2192',\n  radioOn: '\u25C9',\n  radioOff: '\u25EF',\n  tick: '\u2714',\t\n  cross: '\u2716',\t\n  ellipsis: '\u2026',\t\n  pointerSmall: '\u203A',\t\n  line: '\u2500',\t\n  pointer: '\u276F'\t\n};\t\nconst win = {\n  arrowUp: main.arrowUp,\n  arrowDown: main.arrowDown,\n  arrowLeft: main.arrowLeft,\n  arrowRight: main.arrowRight,\n  radioOn: '(*)',\n  radioOff: '( )',\t\n  tick: '\u221A',\t\n  cross: '\u00D7',\t\n  ellipsis: '...',\t\n  pointerSmall: '\u00BB',\t\n  line: '\u2500',\t\n  pointer: '>'\t\n};\t\nconst figures = process.platform === 'win32' ? win : main;\t\n\n module.exports = figures;\n", "'use strict';\n\nconst c = require('kleur');\nconst figures = require('./figures');\n\n// rendering user input.\nconst styles = Object.freeze({\n  password: { scale: 1, render: input => '*'.repeat(input.length) },\n  emoji: { scale: 2, render: input => '\uD83D\uDE03'.repeat(input.length) },\n  invisible: { scale: 0, render: input => '' },\n  default: { scale: 1, render: input => `${input}` }\n});\nconst render = type => styles[type] || styles.default;\n\n// icon to signalize a prompt.\nconst symbols = Object.freeze({\n  aborted: c.red(figures.cross),\n  done: c.green(figures.tick),\n  exited: c.yellow(figures.cross),\n  default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) =>\n  aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default;\n\n// between the question and the user's input.\nconst delimiter = completing =>\n  c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) =>\n  c.gray(expandable ? (expanded ? figures.pointerSmall : '+') : figures.line);\n\nmodule.exports = {\n  styles,\n  render,\n  symbols,\n  symbol,\n  delimiter,\n  item\n};\n", "'use strict';\n\nconst strip = require('./strip');\n\n/**\n * @param {string} msg\n * @param {number} perLine\n */\nmodule.exports = function (msg, perLine) {\n  let lines = String(strip(msg) || '').split(/\\r?\\n/);\n\n  if (!perLine) return lines.length;\n  return lines.map(l => Math.ceil(l.length / perLine))\n      .reduce((a, b) => a + b);\n};\n", "'use strict';\n\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\nmodule.exports = (msg, opts = {}) => {\n  const tab = Number.isSafeInteger(parseInt(opts.margin))\n    ? new Array(parseInt(opts.margin)).fill(' ').join('')\n    : (opts.margin || '');\n\n  const width = opts.width;\n\n  return (msg || '').split(/\\r?\\n/g)\n    .map(line => line\n      .split(/\\s+/g)\n      .reduce((arr, w) => {\n        if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width)\n          arr[arr.length - 1] += ` ${w}`;\n        else arr.push(`${tab}${w}`);\n        return arr;\n      }, [ tab ])\n      .join('\\n'))\n    .join('\\n');\n};\n", "'use strict';\n\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\nmodule.exports = (cursor, total, maxVisible)  => {\n  maxVisible = maxVisible || total;\n\n  let startIndex = Math.min(total- maxVisible, cursor - Math.floor(maxVisible / 2));\n  if (startIndex < 0) startIndex = 0;\n\n  let endIndex = Math.min(startIndex + maxVisible, total);\n\n  return { startIndex, endIndex };\n};\n", "'use strict';\n\nmodule.exports = {\n  action: require('./action'),\n  clear: require('./clear'),\n  style: require('./style'),\n  strip: require('./strip'),\n  figures: require('./figures'),\n  lines: require('./lines'),\n  wrap: require('./wrap'),\n  entriesToDisplay: require('./entriesToDisplay')\n};\n", "'use strict';\n\nconst readline = require('readline');\nconst { action } = require('../util');\nconst EventEmitter = require('events');\nconst { beep, cursor } = require('sisteransi');\nconst color = require('kleur');\n\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass Prompt extends EventEmitter {\n  constructor(opts={}) {\n    super();\n\n    this.firstRender = true;\n    this.in = opts.stdin || process.stdin;\n    this.out = opts.stdout || process.stdout;\n    this.onRender = (opts.onRender || (() => void 0)).bind(this);\n    const rl = readline.createInterface({ input:this.in, escapeCodeTimeout:50 });\n    readline.emitKeypressEvents(this.in, rl);\n\n    if (this.in.isTTY) this.in.setRawMode(true);\n    const isSelect = [ 'SelectPrompt', 'MultiselectPrompt' ].indexOf(this.constructor.name) > -1;\n    const keypress = (str, key) => {\n      let a = action(key, isSelect);\n      if (a === false) {\n        this._ && this._(str, key);\n      } else if (typeof this[a] === 'function') {\n        this[a](key);\n      } else {\n        this.bell();\n      }\n    };\n\n    this.close = () => {\n      this.out.write(cursor.show);\n      this.in.removeListener('keypress', keypress);\n      if (this.in.isTTY) this.in.setRawMode(false);\n      rl.close();\n      this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n      this.closed = true;\n    };\n\n    this.in.on('keypress', keypress);\n  }\n\n  fire() {\n    this.emit('state', {\n      value: this.value,\n      aborted: !!this.aborted,\n      exited: !!this.exited\n    });\n  }\n\n  bell() {\n    this.out.write(beep);\n  }\n\n  render() {\n    this.onRender(color);\n    if (this.firstRender) this.firstRender = false;\n  }\n}\n\nmodule.exports = Prompt;\n", "const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, lines, figures } = require('../util');\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass TextPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.msg = opts.message;\n    this.initial = opts.initial || ``;\n    this.validator = opts.validate || (() => true);\n    this.value = ``;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.clear = clear(``, this.out.columns);\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && this.initial) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(this.initial));\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(v);\n    }\n    this._value = v;\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  reset() {\n    this.value = ``;\n    this.cursor = Number(!!this.initial);\n    this.cursorOffset = 0;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.value = this.value || this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.red = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  async validate() {\n    let valid = await this.validator(this.value);\n    if (typeof valid === `string`) {\n      this.errorMsg = valid;\n      valid = false;\n    }\n    this.error = !valid;\n  }\n\n  async submit() {\n    this.value = this.value || this.initial;\n    this.cursorOffset = 0;\n    this.cursor = this.rendered.length;\n    await this.validate();\n    if (this.error) {\n      this.red = true;\n      this.fire();\n      this.render();\n      return;\n    }\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  next() {\n    if (!this.placeholder) return this.bell();\n    this.value = this.initial;\n    this.cursor = this.rendered.length;\n    this.fire();\n    this.render();\n  }\n\n  moveCursor(n) {\n    if (this.placeholder) return;\n    this.cursor = this.cursor+n;\n    this.cursorOffset += n;\n  }\n\n  _(c, key) {\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${c}${s2}`;\n    this.red = false;\n    this.cursor = this.placeholder ? 0 : s1.length+1;\n    this.render();\n  }\n\n  delete() {\n    if (this.isCursorAtStart()) return this.bell();\n    let s1 = this.value.slice(0, this.cursor-1);\n    let s2 = this.value.slice(this.cursor);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n    if (this.isCursorAtStart()) {\n      this.cursorOffset = 0\n    } else {\n      this.cursorOffset++;\n      this.moveCursor(-1);\n    }\n    this.render();\n  }\n\n  deleteForward() {\n    if(this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    let s1 = this.value.slice(0, this.cursor);\n    let s2 = this.value.slice(this.cursor+1);\n    this.value = `${s1}${s2}`;\n    this.red = false;\n    if (this.isCursorAtEnd()) {\n      this.cursorOffset = 0;\n    } else {\n      this.cursorOffset++;\n    }\n    this.render();\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length;\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0 || this.placeholder) return this.bell();\n    this.moveCursor(-1);\n    this.render();\n  }\n\n  right() {\n    if (this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n    this.moveCursor(1);\n    this.render();\n  }\n\n  isCursorAtStart() {\n    return this.cursor === 0 || (this.placeholder && this.cursor === 1);\n  }\n\n  isCursorAtEnd() {\n    return this.cursor === this.rendered.length || (this.placeholder && this.cursor === this.rendered.length + 1)\n  }\n\n  render() {\n    if (this.closed) return;\n    if (!this.firstRender) {\n      if (this.outputError)\n        this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n    super.render();\n    this.outputError = '';\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      this.red ? color.red(this.rendered) : this.rendered\n    ].join(` `);\n\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`)\n          .reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n  }\n}\n\nmodule.exports = TextPrompt;", "'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\nconst { cursor } = require('sisteransi');\n\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\nclass SelectPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n    this.warn = opts.warn || '- This option is disabled';\n    this.cursor = opts.initial || 0;\n    this.choices = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string')\n        ch = {title: ch, value: idx};\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        description: ch && ch.description,\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = (this.choices[this.cursor] || {}).value;\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  moveCursor(n) {\n    this.cursor = n;\n    this.value = this.choices[n].value;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(0);\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    if (!this.selection.disabled) {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    } else\n      this.bell();\n  }\n\n  first() {\n    this.moveCursor(0);\n    this.render();\n  }\n\n  last() {\n    this.moveCursor(this.choices.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.moveCursor(this.choices.length - 1);\n    } else {\n      this.moveCursor(this.cursor - 1);\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.choices.length - 1) {\n      this.moveCursor(0);\n    } else {\n      this.moveCursor(this.cursor + 1);\n    }\n    this.render();\n  }\n\n  next() {\n    this.moveCursor((this.cursor + 1) % this.choices.length);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') return this.submit();\n  }\n\n  get selection() {\n    return this.choices[this.cursor];\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let { startIndex, endIndex } = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage);\n\n    // Print prompt\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.done ? this.selection.title : this.selection.disabled\n          ? color.yellow(this.warn) : color.gray(this.hint)\n    ].join(' ');\n\n    // Print choices\n    if (!this.done) {\n      this.outputText += '\\n';\n      for (let i = startIndex; i < endIndex; i++) {\n        let title, prefix, desc = '', v = this.choices[i];\n\n        // Determine whether to display \"more choices\" indicators\n        if (i === startIndex && startIndex > 0) {\n          prefix = figures.arrowUp;\n        } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n          prefix = figures.arrowDown;\n        } else {\n          prefix = ' ';\n        }\n\n        if (v.disabled) {\n          title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n          prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : '  ') + prefix;\n        } else {\n          title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n          prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n          if (v.description && this.cursor === i) {\n            desc = ` - ${v.description}`;\n            if (prefix.length + title.length + desc.length >= this.out.columns\n                || v.description.split(/\\r?\\n/).length > 1) {\n              desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns });\n            }\n          }\n        }\n\n        this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n      }\n    }\n\n    this.out.write(this.outputText);\n  }\n}\n\nmodule.exports = SelectPrompt;\n", "const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { cursor, erase } = require('sisteransi');\n\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass TogglePrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = !!opts.initial;\n    this.active = opts.active || 'on';\n    this.inactive = opts.inactive || 'off';\n    this.initialValue = this.value;\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  deactivate() {\n    if (this.value === false) return this.bell();\n    this.value = false;\n    this.render();\n  }\n\n  activate() {\n    if (this.value === true) return this.bell();\n    this.value = true;\n    this.render();\n  }\n\n  delete() {\n    this.deactivate();\n  }\n  left() {\n    this.deactivate();\n  }\n  right() {\n    this.activate();\n  }\n  down() {\n    this.deactivate();\n  }\n  up() {\n    this.activate();\n  }\n\n  next() {\n    this.value = !this.value;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.value = !this.value;\n    } else if (c === '1') {\n      this.value = true;\n    } else if (c === '0') {\n      this.value = false;\n    } else return this.bell();\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      this.value ? this.inactive : color.cyan().underline(this.inactive),\n      color.gray('/'),\n      this.value ? color.cyan().underline(this.active) : this.active\n    ].join(' ');\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = TogglePrompt;\n", "'use strict';\n\nclass DatePart {\n  constructor({token, date, parts, locales}) {\n    this.token = token;\n    this.date = date || new Date();\n    this.parts = parts || [this];\n    this.locales = locales || {};\n  }\n\n  up() {}\n\n  down() {}\n\n  next() {\n    const currentIdx = this.parts.indexOf(this);\n    return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  setTo(val) {}\n\n  prev() {\n    let parts = [].concat(this.parts).reverse();\n    const currentIdx = parts.indexOf(this);\n    return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n  }\n\n  toString() {\n    return String(this.date);\n  }\n}\n\nmodule.exports = DatePart;\n\n\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours((this.date.getHours() + 12) % 24);\n  }\n\n  down() {\n    this.up();\n  }\n\n  toString() {\n    let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n    return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n  }\n}\n\nmodule.exports = Meridiem;\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n  n = n % 10;\n  return n === 1 ? 'st'\n       : n === 2 ? 'nd'\n       : n === 3 ? 'rd'\n       : 'th';\n}\n\nclass Day extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setDate(this.date.getDate() + 1);\n  }\n\n  down() {\n    this.date.setDate(this.date.getDate() - 1);\n  }\n\n  setTo(val) {\n    this.date.setDate(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let date = this.date.getDate();\n    let day = this.date.getDay();\n    return this.token === 'DD' ? String(date).padStart(2, '0')\n         : this.token === 'Do' ? date + pos(date)\n         : this.token === 'd' ? day + 1\n         : this.token === 'ddd' ? this.locales.weekdaysShort[day]\n         : this.token === 'dddd' ? this.locales.weekdays[day]\n         : date;\n  }\n}\n\nmodule.exports = Day;\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setHours(this.date.getHours() + 1);\n  }\n\n  down() {\n    this.date.setHours(this.date.getHours() - 1);\n  }\n\n  setTo(val) {\n    this.date.setHours(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let hours = this.date.getHours();\n    if (/h/.test(this.token))\n      hours = (hours % 12) || 12;\n    return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n  }\n}\n\nmodule.exports = Hours;\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n  }\n\n  down() {\n    this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMilliseconds(parseInt(val.substr(-(this.token.length))));\n  }\n\n  toString() {\n    return String(this.date.getMilliseconds()).padStart(4, '0')\n                                              .substr(0, this.token.length);\n  }\n}\n\nmodule.exports = Milliseconds;\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMinutes(this.date.getMinutes() + 1);\n  }\n\n  down() {\n    this.date.setMinutes(this.date.getMinutes() - 1);\n  }\n\n  setTo(val) {\n    this.date.setMinutes(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let m = this.date.getMinutes();\n    return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n  }\n}\n\nmodule.exports = Minutes;\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setMonth(this.date.getMonth() + 1);\n  }\n\n  down() {\n    this.date.setMonth(this.date.getMonth() - 1);\n  }\n\n  setTo(val) {\n    val = parseInt(val.substr(-2)) - 1;\n    this.date.setMonth(val < 0 ? 0 : val);\n  }\n\n  toString() {\n    let month = this.date.getMonth();\n    let tl = this.token.length;\n    return tl === 2 ? String(month + 1).padStart(2, '0')\n           : tl === 3 ? this.locales.monthsShort[month]\n             : tl === 4 ? this.locales.months[month]\n               : String(month + 1);\n  }\n}\n\nmodule.exports = Month;\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setSeconds(this.date.getSeconds() + 1);\n  }\n\n  down() {\n    this.date.setSeconds(this.date.getSeconds() - 1);\n  }\n\n  setTo(val) {\n    this.date.setSeconds(parseInt(val.substr(-2)));\n  }\n\n  toString() {\n    let s = this.date.getSeconds();\n    return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n  }\n}\n\nmodule.exports = Seconds;\n", "'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n  constructor(opts={}) {\n    super(opts);\n  }\n\n  up() {\n    this.date.setFullYear(this.date.getFullYear() + 1);\n  }\n\n  down() {\n    this.date.setFullYear(this.date.getFullYear() - 1);\n  }\n\n  setTo(val) {\n    this.date.setFullYear(val.substr(-4));\n  }\n\n  toString() {\n    let year = String(this.date.getFullYear()).padStart(4, '0');\n    return this.token.length === 2 ? year.substr(-2) : year;\n  }\n}\n\nmodule.exports = Year;\n", "'use strict';\n\nmodule.exports = {\n  DatePart: require('./datepart'),\n  Meridiem: require('./meridiem'),\n  Day: require('./day'),\n  Hours: require('./hours'),\n  Milliseconds: require('./milliseconds'),\n  Minutes: require('./minutes'),\n  Month: require('./month'),\n  Seconds: require('./seconds'),\n  Year: require('./year'),\n}\n", "'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures } = require('../util');\nconst { erase, cursor } = require('sisteransi');\nconst { DatePart, Meridiem, Day, Hours, Milliseconds, Minutes, Month, Seconds, Year } = require('../dateparts');\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n  1: ({token}) => token.replace(/\\\\(.)/g, '$1'),\n  2: (opts) => new Day(opts), // Day // TODO\n  3: (opts) => new Month(opts), // Month\n  4: (opts) => new Year(opts), // Year\n  5: (opts) => new Meridiem(opts), // AM/PM // TODO (special)\n  6: (opts) => new Hours(opts), // Hours\n  7: (opts) => new Minutes(opts), // Minutes\n  8: (opts) => new Seconds(opts), // Seconds\n  9: (opts) => new Milliseconds(opts), // Fractional seconds\n}\n\nconst dfltLocales = {\n  months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n  monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n  weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n  weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n}\n\n\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass DatePrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = 0;\n    this.typed = '';\n    this.locales = Object.assign(dfltLocales, opts.locales);\n    this._date = opts.initial || new Date();\n    this.errorMsg = opts.error || 'Please Enter A Valid Value';\n    this.validator = opts.validate || (() => true);\n    this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n    this.clear = clear('', this.out.columns);\n    this.render();\n  }\n\n  get value() {\n    return this.date\n  }\n\n  get date() {\n    return this._date;\n  }\n\n  set date(date) {\n    if (date) this._date.setTime(date.getTime());\n  }\n\n  set mask(mask) {\n    let result;\n    this.parts = [];\n    while(result = regex.exec(mask)) {\n      let match = result.shift();\n      let idx = result.findIndex(gr => gr != null);\n      this.parts.push(idx in regexGroups\n        ? regexGroups[idx]({ token: result[idx] || match, date: this.date, parts: this.parts, locales: this.locales })\n        : result[idx] || match);\n    }\n\n    let parts = this.parts.reduce((arr, i) => {\n      if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string')\n        arr[arr.length - 1] += i;\n      else arr.push(i);\n      return arr;\n    }, []);\n\n    this.parts.splice(0);\n    this.parts.push(...parts);\n    this.reset();\n  }\n\n  moveCursor(n) {\n    this.typed = '';\n    this.cursor = n;\n    this.fire();\n  }\n\n  reset() {\n    this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  async validate() {\n    let valid = await this.validator(this.value);\n    if (typeof valid === 'string') {\n      this.errorMsg = valid;\n      valid = false;\n    }\n    this.error = !valid;\n  }\n\n  async submit() {\n    await this.validate();\n    if (this.error) {\n      this.color = 'red';\n      this.fire();\n      this.render();\n      return;\n    }\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  up() {\n    this.typed = '';\n    this.parts[this.cursor].up();\n    this.render();\n  }\n\n  down() {\n    this.typed = '';\n    this.parts[this.cursor].down();\n    this.render();\n  }\n\n  left() {\n    let prev = this.parts[this.cursor].prev();\n    if (prev == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(prev));\n    this.render();\n  }\n\n  right() {\n    let next = this.parts[this.cursor].next();\n    if (next == null) return this.bell();\n    this.moveCursor(this.parts.indexOf(next));\n    this.render();\n  }\n\n  next() {\n    let next = this.parts[this.cursor].next();\n    this.moveCursor(next\n      ? this.parts.indexOf(next)\n      : this.parts.findIndex((part) => part instanceof DatePart));\n    this.render();\n  }\n\n  _(c) {\n    if (/\\d/.test(c)) {\n      this.typed += c;\n      this.parts[this.cursor].setTo(this.typed);\n      this.render();\n    }\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    // Print prompt\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), [])\n          .join('')\n    ].join(' ');\n\n    // Print error\n    if (this.error) {\n      this.outputText += this.errorMsg.split('\\n').reduce(\n          (a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = DatePrompt;\n", "const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { cursor, erase } = require('sisteransi');\nconst { style, figures, clear, lines } = require('../util');\n\nconst isNumber = /[0-9]/;\nconst isDef = any => any !== undefined;\nconst round = (number, precision) => {\n  let factor = Math.pow(10, precision);\n  return Math.round(number * factor) / factor;\n}\n\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass NumberPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.transform = style.render(opts.style);\n    this.msg = opts.message;\n    this.initial = isDef(opts.initial) ? opts.initial : '';\n    this.float = !!opts.float;\n    this.round = opts.round || 2;\n    this.inc = opts.increment || 1;\n    this.min = isDef(opts.min) ? opts.min : -Infinity;\n    this.max = isDef(opts.max) ? opts.max : Infinity;\n    this.errorMsg = opts.error || `Please Enter A Valid Value`;\n    this.validator = opts.validate || (() => true);\n    this.color = `cyan`;\n    this.value = ``;\n    this.typed = ``;\n    this.lastHit = 0;\n    this.render();\n  }\n\n  set value(v) {\n    if (!v && v !== 0) {\n      this.placeholder = true;\n      this.rendered = color.gray(this.transform.render(`${this.initial}`));\n      this._value = ``;\n    } else {\n      this.placeholder = false;\n      this.rendered = this.transform.render(`${round(v, this.round)}`);\n      this._value = round(v, this.round);\n    }\n    this.fire();\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  parse(x) {\n    return this.float ? parseFloat(x) : parseInt(x);\n  }\n\n  valid(c) {\n    return c === `-` || c === `.` && this.float || isNumber.test(c)\n  }\n\n  reset() {\n    this.typed = ``;\n    this.value = ``;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    let x = this.value;\n    this.value = x !== `` ? x : this.initial;\n    this.done = this.aborted = true;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write(`\\n`);\n    this.close();\n  }\n\n  async validate() {\n    let valid = await this.validator(this.value);\n    if (typeof valid === `string`) {\n      this.errorMsg = valid;\n      valid = false;\n    }\n    this.error = !valid;\n  }\n\n  async submit() {\n    await this.validate();\n    if (this.error) {\n      this.color = `red`;\n      this.fire();\n      this.render();\n      return;\n    }\n    let x = this.value;\n    this.value = x !== `` ? x : this.initial;\n    this.done = true;\n    this.aborted = false;\n    this.error = false;\n    this.fire();\n    this.render();\n    this.out.write(`\\n`);\n    this.close();\n  }\n\n  up() {\n    this.typed = ``;\n    if(this.value === '') {\n      this.value = this.min - this.inc;\n    }\n    if (this.value >= this.max) return this.bell();\n    this.value += this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  down() {\n    this.typed = ``;\n    if(this.value === '') {\n      this.value = this.min + this.inc;\n    }\n    if (this.value <= this.min) return this.bell();\n    this.value -= this.inc;\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  delete() {\n    let val = this.value.toString();\n    if (val.length === 0) return this.bell();\n    this.value = this.parse((val = val.slice(0, -1))) || ``;\n    if (this.value !== '' && this.value < this.min) {\n      this.value = this.min;\n    }\n    this.color = `cyan`;\n    this.fire();\n    this.render();\n  }\n\n  next() {\n    this.value = this.initial;\n    this.fire();\n    this.render();\n  }\n\n  _(c, key) {\n    if (!this.valid(c)) return this.bell();\n\n    const now = Date.now();\n    if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n    this.typed += c;\n    this.lastHit = now;\n    this.color = `cyan`;\n\n    if (c === `.`) return this.fire();\n\n    this.value = Math.min(this.parse(this.typed), this.max);\n    if (this.value > this.max) this.value = this.max;\n    if (this.value < this.min) this.value = this.min;\n    this.fire();\n    this.render();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (!this.firstRender) {\n      if (this.outputError)\n        this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n      this.out.write(clear(this.outputText, this.out.columns));\n    }\n    super.render();\n    this.outputError = '';\n\n    // Print prompt\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      !this.done || (!this.done && !this.placeholder)\n          ? color[this.color]().underline(this.rendered) : this.rendered\n    ].join(` `);\n\n    // Print error\n    if (this.error) {\n      this.outputError += this.errorMsg.split(`\\n`)\n          .reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n  }\n}\n\nmodule.exports = NumberPrompt;\n", "'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst Prompt = require('./prompt');\nconst { clear, figures, style, wrap, entriesToDisplay } = require('../util');\n\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass MultiselectPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.cursor = opts.cursor || 0;\n    this.scrollIndex = opts.cursor || 0;\n    this.hint = opts.hint || '';\n    this.warn = opts.warn || '- This option is disabled -';\n    this.minSelected = opts.min;\n    this.showMinError = false;\n    this.maxChoices = opts.max;\n    this.instructions = opts.instructions;\n    this.optionsPerPage = opts.optionsPerPage || 10;\n    this.value = opts.choices.map((ch, idx) => {\n      if (typeof ch === 'string')\n        ch = {title: ch, value: idx};\n      return {\n        title: ch && (ch.title || ch.value || ch),\n        description: ch && ch.description,\n        value: ch && (ch.value === undefined ? idx : ch.value),\n        selected: ch && ch.selected,\n        disabled: ch && ch.disabled\n      };\n    });\n    this.clear = clear('', this.out.columns);\n    if (!opts.overrideRender) {\n      this.render();\n    }\n  }\n\n  reset() {\n    this.value.map(v => !v.selected);\n    this.cursor = 0;\n    this.fire();\n    this.render();\n  }\n\n  selected() {\n    return this.value.filter(v => v.selected);\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    const selected = this.value\n      .filter(e => e.selected);\n    if (this.minSelected && selected.length < this.minSelected) {\n      this.showMinError = true;\n      this.render();\n    } else {\n      this.done = true;\n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  first() {\n    this.cursor = 0;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.value.length - 1;\n    this.render();\n  }\n  next() {\n    this.cursor = (this.cursor + 1) % this.value.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.value.length - 1;\n    } else {\n      this.cursor--;\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.value.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n    this.render();\n  }\n\n  left() {\n    this.value[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.value[this.cursor].selected = true;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.value[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  toggleAll() {\n    if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n      return this.bell();\n    }\n\n    const newSelected = !this.value[this.cursor].selected;\n    this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n    this.render();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else if (c === 'a') {\n      this.toggleAll();\n    } else {\n      return this.bell();\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n      return '\\nInstructions:\\n'\n        + `    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n`\n        + `    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n`\n        + (this.maxChoices === undefined ? `    a: Toggle all\\n` : '')\n        + `    enter/return: Complete answer`;\n    }\n    return '';\n  }\n\n  renderOption(cursor, v, i, arrowIndicator) {\n    const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n    let title, desc;\n\n    if (v.disabled) {\n      title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n    } else {\n      title = cursor === i ? color.cyan().underline(v.title) : v.title;\n      if (cursor === i && v.description) {\n        desc = ` - ${v.description}`;\n        if (prefix.length + title.length + desc.length >= this.out.columns\n          || v.description.split(/\\r?\\n/).length > 1) {\n          desc = '\\n' + wrap(v.description, { margin: prefix.length, width: this.out.columns });\n        }\n      }\n    }\n\n    return prefix + title + color.gray(desc || '');\n  }\n\n  // shared with autocompleteMultiselect\n  paginateOptions(options) {\n    if (options.length === 0) {\n      return color.red('No matches for this query.');\n    }\n\n    let { startIndex, endIndex } = entriesToDisplay(this.cursor, options.length, this.optionsPerPage);\n    let prefix, styledOptions = [];\n\n    for (let i = startIndex; i < endIndex; i++) {\n      if (i === startIndex && startIndex > 0) {\n        prefix = figures.arrowUp;\n      } else if (i === endIndex - 1 && endIndex < options.length) {\n        prefix = figures.arrowDown;\n      } else {\n        prefix = ' ';\n      }\n      styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n    }\n\n    return '\\n' + styledOptions.join('\\n');\n  }\n\n  // shared with autocomleteMultiselect\n  renderOptions(options) {\n    if (!this.done) {\n      return this.paginateOptions(options);\n    }\n    return '';\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value\n        .filter(e => e.selected)\n        .map(v => v.title)\n        .join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions()];\n\n    if (this.value[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render();\n\n    // print prompt\n    let prompt = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.renderDoneOrInstructions()\n    ].join(' ');\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n    prompt += this.renderOptions(this.value);\n\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n}\n\nmodule.exports = MultiselectPrompt;\n", "'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\nconst getIndex = (arr, valOrTitle) => {\n  const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n  return index > -1 ? index : undefined;\n};\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\nclass AutocompletePrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.suggest = opts.suggest;\n    this.choices = opts.choices;\n    this.initial = typeof opts.initial === 'number'\n      ? opts.initial\n      : getIndex(opts.choices, opts.initial);\n    this.select = this.initial || opts.cursor || 0;\n    this.i18n = { noMatches: opts.noMatches || 'no matches found' };\n    this.fallback = opts.fallback || this.initial;\n    this.clearFirst = opts.clearFirst || false;\n    this.suggestions = [];\n    this.input = '';\n    this.limit = opts.limit || 10;\n    this.cursor = 0;\n    this.transform = style.render(opts.style);\n    this.scale = this.transform.scale;\n    this.render = this.render.bind(this);\n    this.complete = this.complete.bind(this);\n    this.clear = clear('', this.out.columns);\n    this.complete(this.render);\n    this.render();\n  }\n\n  set fallback(fb) {\n    this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n  }\n\n  get fallback() {\n    let choice;\n    if (typeof this._fb === 'number')\n      choice = this.choices[this._fb];\n    else if (typeof this._fb === 'string')\n      choice = { title: this._fb };\n    return choice || this._fb || { title: this.i18n.noMatches };\n  }\n\n  moveSelect(i) {\n    this.select = i;\n    if (this.suggestions.length > 0)\n      this.value = getVal(this.suggestions, i);\n    else this.value = this.fallback.value;\n    this.fire();\n  }\n\n  async complete(cb) {\n    const p = (this.completing = this.suggest(this.input, this.choices));\n    const suggestions = await p;\n\n    if (this.completing !== p) return;\n    this.suggestions = suggestions\n      .map((s, i, arr) => ({ title: getTitle(arr, i), value: getVal(arr, i), description: s.description }));\n    this.completing = false;\n    const l = Math.max(suggestions.length - 1, 0);\n    this.moveSelect(Math.min(l, this.select));\n\n    cb && cb();\n  }\n\n  reset() {\n    this.input = '';\n    this.complete(() => {\n      this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n      this.render();\n    });\n    this.render();\n  }\n\n  exit() {\n    if (this.clearFirst && this.input.length > 0) {\n      this.reset();\n    } else {\n      this.done = this.exited = true; \n      this.aborted = false;\n      this.fire();\n      this.render();\n      this.out.write('\\n');\n      this.close();\n    }\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.done = true;\n    this.aborted = this.exited = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${c}${s2}`;\n    this.cursor = s1.length+1;\n    this.complete(this.render);\n    this.render();\n  }\n\n  delete() {\n    if (this.cursor === 0) return this.bell();\n    let s1 = this.input.slice(0, this.cursor-1);\n    let s2 = this.input.slice(this.cursor);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.cursor = this.cursor-1;\n    this.render();\n  }\n\n  deleteForward() {\n    if(this.cursor*this.scale >= this.rendered.length) return this.bell();\n    let s1 = this.input.slice(0, this.cursor);\n    let s2 = this.input.slice(this.cursor+1);\n    this.input = `${s1}${s2}`;\n    this.complete(this.render);\n    this.render();\n  }\n\n  first() {\n    this.moveSelect(0);\n    this.render();\n  }\n\n  last() {\n    this.moveSelect(this.suggestions.length - 1);\n    this.render();\n  }\n\n  up() {\n    if (this.select === 0) {\n      this.moveSelect(this.suggestions.length - 1);\n    } else {\n      this.moveSelect(this.select - 1);\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else {\n      this.moveSelect(this.select + 1);\n    }\n    this.render();\n  }\n\n  next() {\n    if (this.select === this.suggestions.length - 1) {\n      this.moveSelect(0);\n    } else this.moveSelect(this.select + 1);\n    this.render();\n  }\n\n  nextPage() {\n    this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n    this.render();\n  }\n\n  prevPage() {\n    this.moveSelect(Math.max(this.select - this.limit, 0));\n    this.render();\n  }\n\n  left() {\n    if (this.cursor <= 0) return this.bell();\n    this.cursor = this.cursor-1;\n    this.render();\n  }\n\n  right() {\n    if (this.cursor*this.scale >= this.rendered.length) return this.bell();\n    this.cursor = this.cursor+1;\n    this.render();\n  }\n\n  renderOption(v, hovered, isStart, isEnd) {\n    let desc;\n    let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n    let title = hovered ? color.cyan().underline(v.title) : v.title;\n    prefix = (hovered ? color.cyan(figures.pointer) + ' ' : '  ') + prefix;\n    if (v.description) {\n      desc = ` - ${v.description}`;\n      if (prefix.length + title.length + desc.length >= this.out.columns\n        || v.description.split(/\\r?\\n/).length > 1) {\n        desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns })\n      }\n    }\n    return prefix + ' ' + title + color.gray(desc || '');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    let { startIndex, endIndex } = entriesToDisplay(this.select, this.choices.length, this.limit);\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted, this.exited),\n      color.bold(this.msg),\n      style.delimiter(this.completing),\n      this.done && this.suggestions[this.select]\n        ? this.suggestions[this.select].title\n        : this.rendered = this.transform.render(this.input)\n    ].join(' ');\n\n    if (!this.done) {\n      const suggestions = this.suggestions\n        .slice(startIndex, endIndex)\n        .map((item, i) =>  this.renderOption(item,\n          this.select === i + startIndex,\n          i === 0 && startIndex > 0,\n          i + startIndex === endIndex - 1 && endIndex < this.choices.length))\n        .join('\\n');\n      this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n    }\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = AutocompletePrompt;\n", "'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst MultiselectPrompt = require('./multiselect');\nconst { clear, style, figures } = require('../util');\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n  constructor(opts={}) {\n    opts.overrideRender = true;\n    super(opts);\n    this.inputValue = '';\n    this.clear = clear('', this.out.columns);\n    this.filteredOptions = this.value;\n    this.render();\n  }\n\n  last() {\n    this.cursor = this.filteredOptions.length - 1;\n    this.render();\n  }\n  next() {\n    this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n    this.render();\n  }\n\n  up() {\n    if (this.cursor === 0) {\n      this.cursor = this.filteredOptions.length - 1;\n    } else {\n      this.cursor--;\n    }\n    this.render();\n  }\n\n  down() {\n    if (this.cursor === this.filteredOptions.length - 1) {\n      this.cursor = 0;\n    } else {\n      this.cursor++;\n    }\n    this.render();\n  }\n\n  left() {\n    this.filteredOptions[this.cursor].selected = false;\n    this.render();\n  }\n\n  right() {\n    if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n    this.filteredOptions[this.cursor].selected = true;\n    this.render();\n  }\n\n  delete() {\n    if (this.inputValue.length) {\n      this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n      this.updateFilteredOptions();\n    }\n  }\n\n  updateFilteredOptions() {\n    const currentHighlight = this.filteredOptions[this.cursor];\n    this.filteredOptions = this.value\n      .filter(v => {\n        if (this.inputValue) {\n          if (typeof v.title === 'string') {\n            if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n              return true;\n            }\n          }\n          if (typeof v.value === 'string') {\n            if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n              return true;\n            }\n          }\n          return false;\n        }\n        return true;\n      });\n    const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight)\n    this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n    this.render();\n  }\n\n  handleSpaceToggle() {\n    const v = this.filteredOptions[this.cursor];\n\n    if (v.selected) {\n      v.selected = false;\n      this.render();\n    } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n      return this.bell();\n    } else {\n      v.selected = true;\n      this.render();\n    }\n  }\n\n  handleInputChange(c) {\n    this.inputValue = this.inputValue + c;\n    this.updateFilteredOptions();\n  }\n\n  _(c, key) {\n    if (c === ' ') {\n      this.handleSpaceToggle();\n    } else {\n      this.handleInputChange(c);\n    }\n  }\n\n  renderInstructions() {\n    if (this.instructions === undefined || this.instructions) {\n      if (typeof this.instructions === 'string') {\n        return this.instructions;\n      }\n      return `\nInstructions:\n    ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n    ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n    [a,b,c]/delete: Filter choices\n    enter/return: Complete answer\n`;\n    }\n    return '';\n  }\n\n  renderCurrentInput() {\n    return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n  }\n\n  renderOption(cursor, v, i) {\n    let title;\n    if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n    else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n    return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + '  ' + title\n  }\n\n  renderDoneOrInstructions() {\n    if (this.done) {\n      return this.value\n        .filter(e => e.selected)\n        .map(v => v.title)\n        .join(', ');\n    }\n\n    const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n    if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n      output.push(color.yellow(this.warn));\n    }\n    return output.join(' ');\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    super.render();\n\n    // print prompt\n\n    let prompt = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(false),\n      this.renderDoneOrInstructions()\n    ].join(' ');\n\n    if (this.showMinError) {\n      prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n      this.showMinError = false;\n    }\n    prompt += this.renderOptions(this.filteredOptions);\n\n    this.out.write(this.clear + prompt);\n    this.clear = clear(prompt, this.out.columns);\n  }\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;\n", "const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { erase, cursor } = require('sisteransi');\n\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\nclass ConfirmPrompt extends Prompt {\n  constructor(opts={}) {\n    super(opts);\n    this.msg = opts.message;\n    this.value = opts.initial;\n    this.initialValue = !!opts.initial;\n    this.yesMsg = opts.yes || 'yes';\n    this.yesOption = opts.yesOption || '(Y/n)';\n    this.noMsg = opts.no || 'no';\n    this.noOption = opts.noOption || '(y/N)';\n    this.render();\n  }\n\n  reset() {\n    this.value = this.initialValue;\n    this.fire();\n    this.render();\n  }\n\n  exit() {\n    this.abort();\n  }\n\n  abort() {\n    this.done = this.aborted = true;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  submit() {\n    this.value = this.value || false;\n    this.done = true;\n    this.aborted = false;\n    this.fire();\n    this.render();\n    this.out.write('\\n');\n    this.close();\n  }\n\n  _(c, key) {\n    if (c.toLowerCase() === 'y') {\n      this.value = true;\n      return this.submit();\n    }\n    if (c.toLowerCase() === 'n') {\n      this.value = false;\n      return this.submit();\n    }\n    return this.bell();\n  }\n\n  render() {\n    if (this.closed) return;\n    if (this.firstRender) this.out.write(cursor.hide);\n    else this.out.write(clear(this.outputText, this.out.columns));\n    super.render();\n\n    this.outputText = [\n      style.symbol(this.done, this.aborted),\n      color.bold(this.msg),\n      style.delimiter(this.done),\n      this.done ? (this.value ? this.yesMsg : this.noMsg)\n          : color.gray(this.initialValue ? this.yesOption : this.noOption)\n    ].join(' ');\n\n    this.out.write(erase.line + cursor.to(0) + this.outputText);\n  }\n}\n\nmodule.exports = ConfirmPrompt;\n", "'use strict';\n\nmodule.exports = {\n  TextPrompt: require('./text'),\n  SelectPrompt: require('./select'),\n  TogglePrompt: require('./toggle'),\n  DatePrompt: require('./date'),\n  NumberPrompt: require('./number'),\n  MultiselectPrompt: require('./multiselect'),\n  AutocompletePrompt: require('./autocomplete'),\n  AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n  ConfirmPrompt: require('./confirm')\n};\n", "'use strict';\nconst $ = exports;\nconst el = require('./elements');\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts={}) {\n  return new Promise((res, rej) => {\n    const p = new el[type](args);\n    const onAbort = opts.onAbort || noop;\n    const onSubmit = opts.onSubmit || noop;\n    const onExit = opts.onExit || noop;\n    p.on('state', args.onState || noop);\n    p.on('submit', x => res(onSubmit(x)));\n    p.on('exit', x => res(onExit(x)));\n    p.on('abort', x => rej(onAbort(x)));\n  });\n}\n\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.text = args => toPrompt('TextPrompt', args);\n\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.password = args => {\n  args.style = 'password';\n  return $.text(args);\n};\n\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.invisible = args => {\n  args.style = 'invisible';\n  return $.text(args);\n};\n\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.number = args => toPrompt('NumberPrompt', args);\n\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.date = args => toPrompt('DatePrompt', args);\n\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n$.list = args => {\n  const sep = args.separator || ',';\n  return toPrompt('TextPrompt', args, {\n    onSubmit: str => str.split(sep).map(s => s.trim())\n  });\n};\n\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.toggle = args => toPrompt('TogglePrompt', args);\n\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.select = args => toPrompt('SelectPrompt', args);\n\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.multiselect = args => {\n  args.choices = [].concat(args.choices || []);\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n  return toPrompt('MultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\n$.autocompleteMultiselect = args => {\n  args.choices = [].concat(args.choices || []);\n  const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n  return toPrompt('AutocompleteMultiselectPrompt', args, {\n    onAbort: toSelected,\n    onSubmit: toSelected\n  });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(\n  choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase())\n);\n\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.autocomplete = args => {\n  args.suggest = args.suggest || byTitle;\n  args.choices = [].concat(args.choices || []);\n  return toPrompt('AutocompletePrompt', args);\n};\n", "'use strict';\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\nconst noop = () => {};\n\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\nasync function prompt(questions=[], { onSubmit=noop, onCancel=noop }={}) {\n  const answers = {};\n  const override = prompt._override || {};\n  questions = [].concat(questions);\n  let answer, question, quit, name, type, lastPrompt;\n\n  const getFormattedAnswer = async (question, answer, skipValidation = false) => {\n    if (!skipValidation && question.validate && question.validate(answer) !== true) {\n      return;\n    }\n    return question.format ? await question.format(answer, answers) : answer\n  };\n\n  for (question of questions) {\n    ({ name, type } = question);\n\n    // evaluate type first and skip if type is a falsy value\n    if (typeof type === 'function') {\n      type = await type(answer, { ...answers }, question)\n      question['type'] = type\n    }\n    if (!type) continue;\n\n    // if property is a function, invoke it unless it's a special function\n    for (let key in question) {\n      if (passOn.includes(key)) continue;\n      let value = question[key];\n      question[key] = typeof value === 'function' ? await value(answer, { ...answers }, lastPrompt) : value;\n    }\n\n    lastPrompt = question;\n\n    if (typeof question.message !== 'string') {\n      throw new Error('prompt message is required');\n    }\n\n    // update vars in case they changed\n    ({ name, type } = question);\n\n    if (prompts[type] === void 0) {\n      throw new Error(`prompt type (${type}) is not defined`);\n    }\n\n    if (override[question.name] !== undefined) {\n      answer = await getFormattedAnswer(question, override[question.name]);\n      if (answer !== undefined) {\n        answers[name] = answer;\n        continue;\n      }\n    }\n\n    try {\n      // Get the injected answer if there is one or prompt the user\n      answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : await prompts[type](question);\n      answers[name] = answer = await getFormattedAnswer(question, answer, true);\n      quit = await onSubmit(question, answer, answers);\n    } catch (err) {\n      quit = !(await onCancel(question, answers));\n    }\n\n    if (quit) return answers;\n  }\n\n  return answers;\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n  const answer = injected.shift();\n    if (answer instanceof Error) {\n      throw answer;\n    }\n\n    return (answer === undefined) ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n  prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n  prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, { prompt, prompts, inject, override });\n", "function isNodeLT(tar) {\n  tar = (Array.isArray(tar) ? tar : tar.split('.')).map(Number);\n  let i=0, src=process.versions.node.split('.').map(Number);\n  for (; i < tar.length; i++) {\n    if (src[i] > tar[i]) return false;\n    if (tar[i] > src[i]) return true;\n  }\n  return false;\n}\n\nmodule.exports =\n  isNodeLT('8.6.0')\n    ? require('./dist/index.js')\n    : require('./lib/index.js');\n", "/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n  if (obj instanceof Map) {\n    obj.clear =\n      obj.delete =\n      obj.set =\n        function () {\n          throw new Error('map is read-only');\n        };\n  } else if (obj instanceof Set) {\n    obj.add =\n      obj.clear =\n      obj.delete =\n        function () {\n          throw new Error('set is read-only');\n        };\n  }\n\n  // Freeze self\n  Object.freeze(obj);\n\n  Object.getOwnPropertyNames(obj).forEach((name) => {\n    const prop = obj[name];\n    const type = typeof prop;\n\n    // Freeze prop if it is an object or function and also not already frozen\n    if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n      deepFreeze(prop);\n    }\n  });\n\n  return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n  /**\n   * @param {CompiledMode} mode\n   */\n  constructor(mode) {\n    // eslint-disable-next-line no-undefined\n    if (mode.data === undefined) mode.data = {};\n\n    this.data = mode.data;\n    this.isMatchIgnored = false;\n  }\n\n  ignoreMatch() {\n    this.isMatchIgnored = true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n  /** @type Record<string,any> */\n  const result = Object.create(null);\n\n  for (const key in original) {\n    result[key] = original[key];\n  }\n  objects.forEach(function(obj) {\n    for (const key in obj) {\n      result[key] = obj[key];\n    }\n  });\n  return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n  // rarely we can have a sublanguage where language is undefined\n  // TODO: track down why\n  return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n  // sub-language\n  if (name.startsWith(\"language:\")) {\n    return name.replace(\"language:\", \"language-\");\n  }\n  // tiered scope: comment.line\n  if (name.includes(\".\")) {\n    const pieces = name.split(\".\");\n    return [\n      `${prefix}${pieces.shift()}`,\n      ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n    ].join(\" \");\n  }\n  // simple scope\n  return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n  /**\n   * Creates a new HTMLRenderer\n   *\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\n   * @param {{classPrefix: string}} options\n   */\n  constructor(parseTree, options) {\n    this.buffer = \"\";\n    this.classPrefix = options.classPrefix;\n    parseTree.walk(this);\n  }\n\n  /**\n   * Adds texts to the output stream\n   *\n   * @param {string} text */\n  addText(text) {\n    this.buffer += escapeHTML(text);\n  }\n\n  /**\n   * Adds a node open to the output stream (if needed)\n   *\n   * @param {Node} node */\n  openNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    const className = scopeToCSSClass(node.scope,\n      { prefix: this.classPrefix });\n    this.span(className);\n  }\n\n  /**\n   * Adds a node close to the output stream (if needed)\n   *\n   * @param {Node} node */\n  closeNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    this.buffer += SPAN_CLOSE;\n  }\n\n  /**\n   * returns the accumulated buffer\n  */\n  value() {\n    return this.buffer;\n  }\n\n  // helpers\n\n  /**\n   * Builds a span element\n   *\n   * @param {string} className */\n  span(className) {\n    this.buffer += `<span class=\"${className}\">`;\n  }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/**  */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n  /** @type DataNode */\n  const result = { children: [] };\n  Object.assign(result, opts);\n  return result;\n};\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = newNode();\n    this.stack = [this.rootNode];\n  }\n\n  get top() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  get root() { return this.rootNode; }\n\n  /** @param {Node} node */\n  add(node) {\n    this.top.children.push(node);\n  }\n\n  /** @param {string} scope */\n  openNode(scope) {\n    /** @type Node */\n    const node = newNode({ scope });\n    this.add(node);\n    this.stack.push(node);\n  }\n\n  closeNode() {\n    if (this.stack.length > 1) {\n      return this.stack.pop();\n    }\n    // eslint-disable-next-line no-undefined\n    return undefined;\n  }\n\n  closeAllNodes() {\n    while (this.closeNode());\n  }\n\n  toJSON() {\n    return JSON.stringify(this.rootNode, null, 4);\n  }\n\n  /**\n   * @typedef { import(\"./html_renderer\").Renderer } Renderer\n   * @param {Renderer} khulnasoft\n   */\n  walk(khulnasoft) {\n    // this does not\n    return this.constructor._walk(khulnasoft, this.rootNode);\n    // this works\n    // return TokenTree._walk(khulnasoft, this.rootNode);\n  }\n\n  /**\n   * @param {Renderer} khulnasoft\n   * @param {Node} node\n   */\n  static _walk(khulnasoft, node) {\n    if (typeof node === \"string\") {\n      khulnasoft.addText(node);\n    } else if (node.children) {\n      khulnasoft.openNode(node);\n      node.children.forEach((child) => this._walk(khulnasoft, child));\n      khulnasoft.closeNode(node);\n    }\n    return khulnasoft;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  static _collapse(node) {\n    if (typeof node === \"string\") return;\n    if (!node.children) return;\n\n    if (node.children.every(el => typeof el === \"string\")) {\n      // node.text = node.children.join(\"\");\n      // delete node.children;\n      node.children = [node.children.join(\"\")];\n    } else {\n      node.children.forEach((child) => {\n        TokenTree._collapse(child);\n      });\n    }\n  }\n}\n\n/**\n  Currently this is all private API, but this is the minimal API necessary\n  that an Emitter must implement to fully support the parser.\n\n  Minimal interface:\n\n  - addText(text)\n  - __addSublanguage(emitter, subLanguageName)\n  - startScope(scope)\n  - endScope()\n  - finalize()\n  - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n  /**\n   * @param {*} options\n   */\n  constructor(options) {\n    super();\n    this.options = options;\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /** @param {string} scope */\n  startScope(scope) {\n    this.openNode(scope);\n  }\n\n  endScope() {\n    this.closeNode();\n  }\n\n  /**\n   * @param {Emitter & {root: DataNode}} emitter\n   * @param {string} name\n   */\n  __addSublanguage(emitter, name) {\n    /** @type DataNode */\n    const node = emitter.root;\n    if (name) node.scope = `language:${name}`;\n\n    this.add(node);\n  }\n\n  toHTML() {\n    const renderer = new HTMLRenderer(this, this.options);\n    return renderer.value();\n  }\n\n  finalize() {\n    this.closeAllNodes();\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n  return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n  const match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n//   interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n//   follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n  let numCaptures = 0;\n\n  return regexps.map((regex) => {\n    numCaptures += 1;\n    const offset = numCaptures;\n    let re = source(regex);\n    let out = '';\n\n    while (re.length > 0) {\n      const match = BACKREF_RE.exec(re);\n      if (!match) {\n        out += re;\n        break;\n      }\n      out += re.substring(0, match.index);\n      re = re.substring(match.index + match[0].length);\n      if (match[0][0] === '\\\\' && match[1]) {\n        // Adjust the backreference.\n        out += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        out += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    return out;\n  }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n  const beginShebang = /^#![ ]*\\//;\n  if (opts.binary) {\n    opts.begin = concat(\n      beginShebang,\n      /.*\\b/,\n      opts.binary,\n      /\\b.*/);\n  }\n  return inherit$1({\n    scope: 'meta',\n    begin: beginShebang,\n    end: /$/,\n    relevance: 0,\n    /** @type {ModeCallback} */\n    \"on:begin\": (m, resp) => {\n      if (m.index !== 0) resp.ignoreMatch();\n    }\n  }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n  begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n  scope: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  scope: 'string',\n  begin: '\"',\n  end: '\"',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n  begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n  const mode = inherit$1(\n    {\n      scope: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push({\n    scope: 'doctag',\n    // hack to avoid the space from being included. the space is necessary to\n    // match here to prevent the plain text rule below from gobbling up doctags\n    begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n    end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n    excludeBegin: true,\n    relevance: 0\n  });\n  const ENGLISH_WORD = either(\n    // list of common 1 and 2 letter words in English\n    \"I\",\n    \"a\",\n    \"is\",\n    \"so\",\n    \"us\",\n    \"to\",\n    \"at\",\n    \"if\",\n    \"in\",\n    \"it\",\n    \"on\",\n    // note: this is not an exhaustive list of contractions, just popular ones\n    /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n    /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n    /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n  );\n  // looking like plain text, more likely to be a comment\n  mode.contains.push(\n    {\n      // TODO: how to include \", (, ) without breaking grammars that use these for\n      // comment delimiters?\n      // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n      // ---\n\n      // this tries to find sequences of 3 english words in a row (without any\n      // \"programming\" type syntax) this gives us a strong signal that we've\n      // TRULY found a comment - vs perhaps scanning with the wrong language.\n      // It's possible to find something that LOOKS like the start of the\n      // comment - but then if there is no readable text - good chance it is a\n      // false match and not a comment.\n      //\n      // for a visual example please see:\n      // https://github.com/highlightjs/highlight.js/issues/2827\n\n      begin: concat(\n        /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n        '(',\n        ENGLISH_WORD,\n        /[.]?[:]?([.][ ]|[ ])/,\n        '){3}') // look for 3 words in a row\n    }\n  );\n  return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n  scope: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  scope: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  scope: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  scope: \"regexp\",\n  begin: /\\/(?=[^/\\n]*\\/)/,\n  end: /\\/[gimuy]*/,\n  contains: [\n    BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [BACKSLASH_ESCAPE]\n    }\n  ]\n};\nconst TITLE_MODE = {\n  scope: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  scope: 'title',\n  begin: UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\nconst METHOD_GUARD = {\n  // excludes method names from keyword processing\n  begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n  return Object.assign(mode,\n    {\n      /** @type {ModeCallback} */\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n      /** @type {ModeCallback} */\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n    });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  APOS_STRING_MODE: APOS_STRING_MODE,\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n  COMMENT: COMMENT,\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n  C_NUMBER_MODE: C_NUMBER_MODE,\n  C_NUMBER_RE: C_NUMBER_RE,\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n  IDENT_RE: IDENT_RE,\n  MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n  METHOD_GUARD: METHOD_GUARD,\n  NUMBER_MODE: NUMBER_MODE,\n  NUMBER_RE: NUMBER_RE,\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n  REGEXP_MODE: REGEXP_MODE,\n  RE_STARTERS_RE: RE_STARTERS_RE,\n  SHEBANG: SHEBANG,\n  TITLE_MODE: TITLE_MODE,\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`.  The extension then just moves `match` into\n// `begin` when it runs.  Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n  const before = match.input[match.index - 1];\n  if (before === \".\") {\n    response.ignoreMatch();\n  }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.className !== undefined) {\n    mode.scope = mode.className;\n    delete mode.className;\n  }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n  if (!parent) return;\n  if (!mode.beginKeywords) return;\n\n  // for languages with keywords that include non-word characters checking for\n  // a word boundary is not sufficient, so instead we check for a word boundary\n  // or whitespace - this does no harm in any case since our keyword engine\n  // doesn't allow spaces in keywords anyways and we still check for the boundary\n  // first\n  mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n  mode.__beforeBegin = skipIfHasPrecedingDot;\n  mode.keywords = mode.keywords || mode.beginKeywords;\n  delete mode.beginKeywords;\n\n  // prevents double relevance, the keywords themselves provide\n  // relevance, the mode doesn't need to double it\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n  if (!Array.isArray(mode.illegal)) return;\n\n  mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n  if (!mode.match) return;\n  if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n  mode.begin = mode.match;\n  delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n  if (!mode.beforeMatch) return;\n  // starts conflicts with endsParent which we need to make sure the child\n  // rule is not matched multiple times\n  if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n  const originalMode = Object.assign({}, mode);\n  Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n  mode.keywords = originalMode.keywords;\n  mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n  mode.starts = {\n    relevance: 0,\n    contains: [\n      Object.assign(originalMode, { endsParent: true })\n    ]\n  };\n  mode.relevance = 0;\n\n  delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n  'of',\n  'and',\n  'for',\n  'in',\n  'not',\n  'or',\n  'if',\n  'then',\n  'parent', // common variable name\n  'list', // common variable name\n  'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n  /** @type {import(\"highlight.js/private\").KeywordDict} */\n  const compiledKeywords = Object.create(null);\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing scopeName (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(scopeName, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(scopeName, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(scopeName) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n      );\n    });\n  }\n  return compiledKeywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} scopeName\n   * @param {Array<string>} keywordList\n   */\n  function compileList(scopeName, keywordList) {\n    if (caseInsensitive) {\n      keywordList = keywordList.map(x => x.toLowerCase());\n    }\n    keywordList.forEach(function(keyword) {\n      const pair = keyword.split('|');\n      compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n    });\n  }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n  // manual scores always win over common keywords\n  // so you can force a score of 1 if you really insist\n  if (providedScore) {\n    return Number(providedScore);\n  }\n\n  return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n  console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n  console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n  if (seenDeprecations[`${version}/${message}`]) return;\n\n  console.log(`Deprecated as of ${version}. ${message}`);\n  seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n *   { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n *   (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n *   { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5.  This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n  let offset = 0;\n  const scopeNames = mode[key];\n  /** @type Record<number,boolean> */\n  const emit = {};\n  /** @type Record<number,string> */\n  const positions = {};\n\n  for (let i = 1; i <= regexes.length; i++) {\n    positions[i + offset] = scopeNames[i];\n    emit[i + offset] = true;\n    offset += countMatchGroups(regexes[i - 1]);\n  }\n  // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n  // output from inside match groups\n  mode[key] = positions;\n  mode[key]._emit = emit;\n  mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n  if (!Array.isArray(mode.begin)) return;\n\n  if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n    error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n    error(\"beginScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n  mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n  if (!Array.isArray(mode.end)) return;\n\n  if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n    error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n    error(\"endScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.end, { key: \"endScope\" });\n  mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n  {\n    match: [ /def/, /\\w+/ ]\n    scope: { 1: \"keyword\" , 2: \"title\" }\n  }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n  if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n    mode.beginScope = mode.scope;\n    delete mode.scope;\n  }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n  scopeSugar(mode);\n\n  if (typeof mode.beginScope === \"string\") {\n    mode.beginScope = { _wrap: mode.beginScope };\n  }\n  if (typeof mode.endScope === \"string\") {\n    mode.endScope = { _wrap: mode.endScope };\n  }\n\n  beginMultiClass(mode);\n  endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n  /**\n   * Builds a regex with the case sensitivity of the current language\n   *\n   * @param {RegExp | string} value\n   * @param {boolean} [global]\n   */\n  function langRe(value, global) {\n    return new RegExp(\n      source(value),\n      'm'\n      + (language.case_insensitive ? 'i' : '')\n      + (language.unicodeRegex ? 'u' : '')\n      + (global ? 'g' : '')\n    );\n  }\n\n  /**\n    Stores multiple regular expressions and allows you to quickly search for\n    them all in a string simultaneously - returning the first match.  It does\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n    and joined by `|` - using match groups to track position.  When a match is\n    found checking which position in the array has content allows us to figure\n    out which of the original regexes / match groups triggered the match.\n\n    The match object itself (the result of `Regex.exec`) is returned but also\n    enhanced by merging in any meta-data that was registered with the regex.\n    This is how we keep track of which mode matched, and what type of rule\n    (`illegal`, `begin`, end, etc).\n  */\n  class MultiRegex {\n    constructor() {\n      this.matchIndexes = {};\n      // @ts-ignore\n      this.regexes = [];\n      this.matchAt = 1;\n      this.position = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      opts.position = this.position++;\n      // @ts-ignore\n      this.matchIndexes[this.matchAt] = opts;\n      this.regexes.push([opts, re]);\n      this.matchAt += countMatchGroups(re) + 1;\n    }\n\n    compile() {\n      if (this.regexes.length === 0) {\n        // avoids the need to check length every time exec is called\n        // @ts-ignore\n        this.exec = () => null;\n      }\n      const terminators = this.regexes.map(el => el[1]);\n      this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n      this.lastIndex = 0;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      this.matcherRe.lastIndex = this.lastIndex;\n      const match = this.matcherRe.exec(s);\n      if (!match) { return null; }\n\n      // eslint-disable-next-line no-undefined\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n      // @ts-ignore\n      const matchData = this.matchIndexes[i];\n      // trim off any earlier non-relevant match groups (ie, the other regex\n      // match groups that make up the multi-matcher)\n      match.splice(0, i);\n\n      return Object.assign(match, matchData);\n    }\n  }\n\n  /*\n    Created to solve the key deficiently with MultiRegex - there is no way to\n    test for multiple matches at a single location.  Why would we need to do\n    that?  In the future a more dynamic engine will allow certain matches to be\n    ignored.  An example: if we matched say the 3rd regex in a large group but\n    decided to ignore it - we'd need to started testing again at the 4th\n    regex... but MultiRegex itself gives us no real way to do that.\n\n    So what this class creates MultiRegexs on the fly for whatever search\n    position they are needed.\n\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\n    grammars most of the time we will never actually need anything more than the\n    first MultiRegex - so this shouldn't have too much overhead.\n\n    Say this is our search group, and we match regex3, but wish to ignore it.\n\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\n\n    What we need is a new MultiRegex that only includes the remaining\n    possibilities:\n\n      regex4 | regex5                               ' ie, startAt = 3\n\n    This class wraps all that complexity up in a simple API... `startAt` decides\n    where in the array of expressions to start doing the matching. It\n    auto-increments, so if a match is found at position 2, then startAt will be\n    set to 3.  If the end is reached startAt will return to 0.\n\n    MOST of the time the parser will be setting startAt manually to 0.\n  */\n  class ResumableMultiRegex {\n    constructor() {\n      // @ts-ignore\n      this.rules = [];\n      // @ts-ignore\n      this.multiRegexes = [];\n      this.count = 0;\n\n      this.lastIndex = 0;\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    getMatcher(index) {\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n      const matcher = new MultiRegex();\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n      matcher.compile();\n      this.multiRegexes[index] = matcher;\n      return matcher;\n    }\n\n    resumingScanAtSamePosition() {\n      return this.regexIndex !== 0;\n    }\n\n    considerAll() {\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      this.rules.push([re, opts]);\n      if (opts.type === \"begin\") this.count++;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      const m = this.getMatcher(this.regexIndex);\n      m.lastIndex = this.lastIndex;\n      let result = m.exec(s);\n\n      // The following is because we have no easy way to say \"resume scanning at the\n      // existing position but also skip the current rule ONLY\". What happens is\n      // all prior rules are also skipped which can result in matching the wrong\n      // thing. Example of matching \"booger\":\n\n      // our matcher is [string, \"booger\", number]\n      //\n      // ....booger....\n\n      // if \"booger\" is ignored then we'd really need a regex to scan from the\n      // SAME position for only: [string, number] but ignoring \"booger\" (if it\n      // was the first match), a simple resume would scan ahead who knows how\n      // far looking only for \"number\", ignoring potential string matches (or\n      // future \"booger\" matches that might be valid.)\n\n      // So what we do: We execute two matchers, one resuming at the same\n      // position, but the second full matcher starting at the position after:\n\n      //     /--- resume first regex match here (for [number])\n      //     |/---- full match here for [string, \"booger\", number]\n      //     vv\n      // ....booger....\n\n      // Which ever results in a match first is then used. So this 3-4 step\n      // process essentially allows us to say \"match at this position, excluding\n      // a prior rule that was ignored\".\n      //\n      // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n      // 2. Resume matching for [number]\n      // 3. Match at index + 1 for [string, \"booger\", number]\n      // 4. If #2 and #3 result in matches, which came first?\n      if (this.resumingScanAtSamePosition()) {\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n          const m2 = this.getMatcher(0);\n          m2.lastIndex = this.lastIndex + 1;\n          result = m2.exec(s);\n        }\n      }\n\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) {\n          // wrap-around to considering all matches again\n          this.considerAll();\n        }\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n   * the content and find matches.\n   *\n   * @param {CompiledMode} mode\n   * @returns {ResumableMultiRegex}\n   */\n  function buildModeRegex(mode) {\n    const mm = new ResumableMultiRegex();\n\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n    if (mode.terminatorEnd) {\n      mm.addRule(mode.terminatorEnd, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\n  }\n\n  /** skip vs abort vs ignore\n   *\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\n   *           but all content is held and added to the parent buffer rather than being\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\n   *           a single large buffer than can be parsed by sublanguage.\n   *\n   *             - The mode begin ands ends normally.\n   *             - Content matched is added to the parent mode buffer.\n   *             - The parser cursor is moved forward normally.\n   *\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\n   *           never matched) but DOES NOT continue to match subsequent `contains`\n   *           modes.  Abort is bad/suboptimal because it can result in modes\n   *           farther down not getting applied because an earlier rule eats the\n   *           content but then aborts.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is added to the mode buffer.\n   *             - The parser cursor is moved forward accordingly.\n   *\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\n   *           the current parser implementation.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is ignored.\n   *             - The parser cursor is not moved forward.\n   */\n\n  /**\n   * Compiles an individual mode\n   *\n   * This can raise an error if the mode contains certain detectable known logic\n   * issues.\n   * @param {Mode} mode\n   * @param {CompiledMode | null} [parent]\n   * @returns {CompiledMode | never}\n   */\n  function compileMode(mode, parent) {\n    const cmode = /** @type CompiledMode */ (mode);\n    if (mode.isCompiled) return cmode;\n\n    [\n      scopeClassName,\n      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch,\n      MultiClass,\n      beforeMatchExt\n    ].forEach(ext => ext(mode, parent));\n\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    [\n      beginKeywords,\n      // do this later so compiler extensions that come earlier have access to the\n      // raw array if they wanted to perhaps manipulate it, etc.\n      compileIllegal,\n      // default to 1 relevance if not specified\n      compileRelevance\n    ].forEach(ext => ext(mode, parent));\n\n    mode.isCompiled = true;\n\n    let keywordPattern = null;\n    if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n      // we need a copy because keywords might be compiled multiple times\n      // so we can't go deleting $pattern from the original on the first\n      // pass\n      mode.keywords = Object.assign({}, mode.keywords);\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n    keywordPattern = keywordPattern || /\\w+/;\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(cmode.begin);\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(cmode.end);\n      cmode.terminatorEnd = source(cmode.end) || '';\n      if (mode.endsWithParent && parent.terminatorEnd) {\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expandOrCloneMode(c === 'self' ? mode : c);\n    }));\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n    if (mode.starts) {\n      compileMode(mode.starts, parent);\n    }\n\n    cmode.matcher = buildModeRegex(cmode);\n    return cmode;\n  }\n\n  if (!language.compilerExtensions) language.compilerExtensions = [];\n\n  // self is not valid at the top-level\n  if (language.contains && language.contains.includes('self')) {\n    throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");\n  }\n\n  // we need a null object, which inherit will guarantee\n  language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n  return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n  if (!mode) return false;\n\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n  if (mode.variants && !mode.cachedVariants) {\n    mode.cachedVariants = mode.variants.map(function(variant) {\n      return inherit$1(mode, { variants: null }, variant);\n    });\n  }\n\n  // EXPAND\n  // if we have variants then essentially \"replace\" the mode with the variants\n  // this happens in compileMode, where this function is called from\n  if (mode.cachedVariants) {\n    return mode.cachedVariants;\n  }\n\n  // CLONE\n  // if we have dependencies on parents then we need a unique\n  // instance of ourselves, so we can be reused with many\n  // different parents without issue\n  if (dependencyOnParent(mode)) {\n    return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit$1(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"11.9.0\";\n\nclass HTMLInjectionError extends Error {\n  constructor(reason, html) {\n    super(reason);\n    this.name = \"HTMLInjectionError\";\n    this.html = html;\n  }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  const languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  const aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  const plugins = [];\n\n  // safe/production mode - swallows more errors, tries to keep running\n  // even if a single syntax or parse hits a fatal error\n  let SAFE_MODE = true;\n  const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n  /** @type {Language} */\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n  // Global options used when within external APIs. This is modified when\n  // calling the `hljs.configure` function.\n  /** @type HLJSOptions */\n  let options = {\n    ignoreUnescapedHTML: false,\n    throwUnescapedHTML: false,\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    cssSelector: 'pre code',\n    languages: null,\n    // beta configuration options, subject to change, welcome to discuss\n    // https://github.com/highlightjs/highlight.js/issues/1086\n    __emitter: TokenTreeEmitter\n  };\n\n  /* Utility functions */\n\n  /**\n   * Tests a language name to see if highlighting should be skipped\n   * @param {string} languageName\n   */\n  function shouldNotHighlight(languageName) {\n    return options.noHighlightRe.test(languageName);\n  }\n\n  /**\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n   */\n  function blockLanguage(block) {\n    let classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names.\n    const match = options.languageDetectRe.exec(classes);\n    if (match) {\n      const language = getLanguage(match[1]);\n      if (!language) {\n        warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        warn(\"Falling back to no-highlight mode for this block.\", block);\n      }\n      return language ? match[1] : 'no-highlight';\n    }\n\n    return classes\n      .split(/\\s+/)\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n  }\n\n  /**\n   * Core highlighting function.\n   *\n   * OLD API\n   * highlight(lang, code, ignoreIllegals, continuation)\n   *\n   * NEW API\n   * highlight(code, {lang, ignoreIllegals})\n   *\n   * @param {string} codeOrLanguageName - the language to use for highlighting\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   *\n   * @returns {HighlightResult} Result - an object that represents the result\n   * @property {string} language - the language name\n   * @property {number} relevance - the relevance score\n   * @property {string} value - the highlighted HTML code\n   * @property {string} code - the original raw code\n   * @property {CompiledMode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrLanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n    } else {\n      // old API\n      deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n      deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n      languageName = codeOrLanguageName;\n      code = optionsOrCode;\n    }\n\n    // https://github.com/highlightjs/highlight.js/issues/3149\n    // eslint-disable-next-line no-undefined\n    if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n    /** @type {BeforeHighlightContext} */\n    const context = {\n      code,\n      language: languageName\n    };\n    // the plugin can change the desired language or the code to be highlighted\n    // just be changing the object it was passed\n    fire(\"before:highlight\", context);\n\n    // a before plugin can usurp the result completely by providing it's own\n    // in which case we don't even need to call highlight\n    const result = context.result\n      ? context.result\n      : _highlight(context.language, context.code, ignoreIllegals);\n\n    result.code = context.code;\n    // the plugin can change anything in result to suite it\n    fire(\"after:highlight\", result);\n\n    return result;\n  }\n\n  /**\n   * private highlight that's used internally and does not fire callbacks\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} codeToHighlight - the code to highlight\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\n   * @returns {HighlightResult} - result of the highlight operation\n  */\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n    const keywordHits = Object.create(null);\n\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {string} matchText - the textual match\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, matchText) {\n      return mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(modeBuffer);\n        return;\n      }\n\n      let lastIndex = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(modeBuffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += modeBuffer.substring(lastIndex, match.index);\n        const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n        const data = keywordData(top, word);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          keywordHits[word] = (keywordHits[word] || 0) + 1;\n          if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n          if (kind.startsWith(\"_\")) {\n            // _ implied for relevance only, do not highlight\n            // by applying a class name\n            buf += match[0];\n          } else {\n            const cssClass = language.classNameAliases[kind] || kind;\n            emitKeyword(match[0], cssClass);\n          }\n        } else {\n          buf += match[0];\n        }\n        lastIndex = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(modeBuffer);\n      }\n      buf += modeBuffer.substring(lastIndex);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (modeBuffer === \"\") return;\n      /** @type HighlightResult */\n      let result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(modeBuffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n      } else {\n        result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n      }\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      emitter.__addSublanguage(result._emitter, result.language);\n    }\n\n    function processBuffer() {\n      if (top.subLanguage != null) {\n        processSubLanguage();\n      } else {\n        processKeywords();\n      }\n      modeBuffer = '';\n    }\n\n    /**\n     * @param {string} text\n     * @param {string} scope\n     */\n    function emitKeyword(keyword, scope) {\n      if (keyword === \"\") return;\n\n      emitter.startScope(scope);\n      emitter.addText(keyword);\n      emitter.endScope();\n    }\n\n    /**\n     * @param {CompiledScope} scope\n     * @param {RegExpMatchArray} match\n     */\n    function emitMultiClass(scope, match) {\n      let i = 1;\n      const max = match.length - 1;\n      while (i <= max) {\n        if (!scope._emit[i]) { i++; continue; }\n        const klass = language.classNameAliases[scope[i]] || scope[i];\n        const text = match[i];\n        if (klass) {\n          emitKeyword(text, klass);\n        } else {\n          modeBuffer = text;\n          processKeywords();\n          modeBuffer = \"\";\n        }\n        i++;\n      }\n    }\n\n    /**\n     * @param {CompiledMode} mode - new mode to start\n     * @param {RegExpMatchArray} match\n     */\n    function startNewMode(mode, match) {\n      if (mode.scope && typeof mode.scope === \"string\") {\n        emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n      }\n      if (mode.beginScope) {\n        // beginScope just wraps the begin match itself in a scope\n        if (mode.beginScope._wrap) {\n          emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n          modeBuffer = \"\";\n        } else if (mode.beginScope._multi) {\n          // at this point modeBuffer should just be the match\n          emitMultiClass(mode.beginScope, match);\n          modeBuffer = \"\";\n        }\n      }\n\n      top = Object.create(mode, { parent: { value: top } });\n      return top;\n    }\n\n    /**\n     * @param {CompiledMode } mode - the mode to potentially end\n     * @param {RegExpMatchArray} match - the latest match\n     * @param {string} matchPlusRemainder - match plus remainder of content\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n     */\n    function endOfMode(mode, match, matchPlusRemainder) {\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n      if (matched) {\n        if (mode[\"on:end\"]) {\n          const resp = new Response(mode);\n          mode[\"on:end\"](match, resp);\n          if (resp.isMatchIgnored) matched = false;\n        }\n\n        if (matched) {\n          while (mode.endsParent && mode.parent) {\n            mode = mode.parent;\n          }\n          return mode;\n        }\n      }\n      // even if on:end fires an `ignore` it's still possible\n      // that we might trigger the end node because of a parent mode\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, match, matchPlusRemainder);\n      }\n    }\n\n    /**\n     * Handle matching but then ignoring a sequence of text\n     *\n     * @param {string} lexeme - string containing full match text\n     */\n    function doIgnore(lexeme) {\n      if (top.matcher.regexIndex === 0) {\n        // no more regexes to potentially match here, so we move the cursor forward one\n        // space\n        modeBuffer += lexeme[0];\n        return 1;\n      } else {\n        // no need to move the cursor, we still have additional regexes to try and\n        // match at this very spot\n        resumeScanAtSamePosition = true;\n        return 0;\n      }\n    }\n\n    /**\n     * Handle the start of a new potential mode match\n     *\n     * @param {EnhancedMatch} match - the current match\n     * @returns {number} how far to advance the parse cursor\n     */\n    function doBeginMatch(match) {\n      const lexeme = match[0];\n      const newMode = match.rule;\n\n      const resp = new Response(newMode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\n      }\n\n      if (newMode.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (newMode.excludeBegin) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\n          modeBuffer = lexeme;\n        }\n      }\n      startNewMode(newMode, match);\n      return newMode.returnBegin ? 0 : lexeme.length;\n    }\n\n    /**\n     * Handle the potential end of mode\n     *\n     * @param {RegExpMatchArray} match - the current match\n     */\n    function doEndMatch(match) {\n      const lexeme = match[0];\n      const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      if (top.endScope && top.endScope._wrap) {\n        processBuffer();\n        emitKeyword(lexeme, top.endScope._wrap);\n      } else if (top.endScope && top.endScope._multi) {\n        processBuffer();\n        emitMultiClass(top.endScope, match);\n      } else if (origin.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          modeBuffer = lexeme;\n        }\n      }\n      do {\n        if (top.scope) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== endMode.parent);\n      if (endMode.starts) {\n        startNewMode(endMode.starts, match);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      const list = [];\n      for (let current = top; current !== language; current = current.parent) {\n        if (current.scope) {\n          list.unshift(current.scope);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    let lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      const lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      modeBuffer += textBeforeMatch;\n\n      if (lexeme == null) {\n        processBuffer();\n        return 0;\n      }\n\n      // we've found a 0 width match and we're stuck, so we need to advance\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\n      // sometimes they can end up matching nothing at all\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n      if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n        // spit the \"skipped\" character that our regex choked on back into the output sequence\n        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error(`0 width match regex (${languageName})`);\n          err.languageName = languageName;\n          err.badRule = lastMatch.rule;\n          throw err;\n        }\n        return 1;\n      }\n      lastMatch = match;\n\n      if (match.type === \"begin\") {\n        return doBeginMatch(match);\n      } else if (match.type === \"illegal\" && !ignoreIllegals) {\n        // illegal match, we do not continue processing\n        /** @type {AnnotatedError} */\n        const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        const processed = doEndMatch(match);\n        if (processed !== NO_MATCH) {\n          return processed;\n        }\n      }\n\n      // edge case for when illegal matches $ (end of line) which is technically\n      // a 0 width match but not a begin/end match so it's not caught by the\n      // first handler (when ignoreIllegals is true)\n      if (match.type === \"illegal\" && lexeme === \"\") {\n        // advance so we aren't stuck in an infinite loop\n        return 1;\n      }\n\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\n      // decent number of iterations yet our index (cursor position in our\n      // parsing) still 3x behind our index then something is very wrong\n      // so we bail\n      if (iterations > 100000 && iterations > match.index * 3) {\n        const err = new Error('potential infinite loop, way more iterations than matches');\n        throw err;\n      }\n\n      /*\n      Why might be find ourselves here?  An potential end match that was\n      triggered but could not be completed.  IE, `doEndMatch` returned NO_MATCH.\n      (this could be because a callback requests the match be ignored, etc)\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      modeBuffer += lexeme;\n      return lexeme.length;\n    }\n\n    const language = getLanguage(languageName);\n    if (!language) {\n      error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    const md = compileLanguage(language);\n    let result = '';\n    /** @type {CompiledMode} */\n    let top = continuation || md;\n    /** @type Record<string,CompiledMode> */\n    const continuations = {}; // keep continuations for sub-languages\n    const emitter = new options.__emitter(options);\n    processContinuations();\n    let modeBuffer = '';\n    let relevance = 0;\n    let index = 0;\n    let iterations = 0;\n    let resumeScanAtSamePosition = false;\n\n    try {\n      if (!language.__emitTokens) {\n        top.matcher.considerAll();\n\n        for (;;) {\n          iterations++;\n          if (resumeScanAtSamePosition) {\n            // only regexes not matched previously will now be\n            // considered for a potential match\n            resumeScanAtSamePosition = false;\n          } else {\n            top.matcher.considerAll();\n          }\n          top.matcher.lastIndex = index;\n\n          const match = top.matcher.exec(codeToHighlight);\n          // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n          if (!match) break;\n\n          const beforeMatch = codeToHighlight.substring(index, match.index);\n          const processedCount = processLexeme(beforeMatch, match);\n          index = match.index + processedCount;\n        }\n        processLexeme(codeToHighlight.substring(index));\n      } else {\n        language.__emitTokens(codeToHighlight, emitter);\n      }\n\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        language: languageName,\n        value: result,\n        relevance,\n        illegal: false,\n        _emitter: emitter,\n        _top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: true,\n          relevance: 0,\n          _illegalBy: {\n            message: err.message,\n            index,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode,\n            resultSoFar: result\n          },\n          _emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: false,\n          relevance: 0,\n          errorRaised: err,\n          _emitter: emitter,\n          _top: top\n        };\n      } else {\n        throw err;\n      }\n    }\n  }\n\n  /**\n   * returns a valid highlight result, without actually doing any actual work,\n   * auto highlight starts with this and it's possible for small snippets that\n   * auto-detection may not find a better match\n   * @param {string} code\n   * @returns {HighlightResult}\n   */\n  function justTextHighlightResult(code) {\n    const result = {\n      value: escape(code),\n      illegal: false,\n      relevance: 0,\n      _top: PLAINTEXT_LANGUAGE,\n      _emitter: new options.__emitter(options)\n    };\n    result._emitter.addText(code);\n    return result;\n  }\n\n  /**\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - secondBest (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n    @param {string} code\n    @param {Array<string>} [languageSubset]\n    @returns {AutoHighlightResult}\n  */\n  function highlightAuto(code, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    const plaintext = justTextHighlightResult(code);\n\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n      _highlight(name, code, false)\n    );\n    results.unshift(plaintext); // plaintext is always an option\n\n    const sorted = results.sort((a, b) => {\n      // sort base on relevance\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n      // always award the tie to the base language\n      // ie if C++ and Arduino are tied, it's more likely to be C++\n      if (a.language && b.language) {\n        if (getLanguage(a.language).supersetOf === b.language) {\n          return 1;\n        } else if (getLanguage(b.language).supersetOf === a.language) {\n          return -1;\n        }\n      }\n\n      // otherwise say they are equal, which has the effect of sorting on\n      // relevance while preserving the original ordering - which is how ties\n      // have historically been settled, ie the language that comes first always\n      // wins in the case of a tie\n      return 0;\n    });\n\n    const [best, secondBest] = sorted;\n\n    /** @type {AutoHighlightResult} */\n    const result = best;\n    result.secondBest = secondBest;\n\n    return result;\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {HTMLElement} element\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function updateClassName(element, currentLang, resultLang) {\n    const language = (currentLang && aliases[currentLang]) || resultLang;\n\n    element.classList.add(\"hljs\");\n    element.classList.add(`language-${language}`);\n  }\n\n  /**\n   * Applies highlighting to a DOM node containing code.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightElement(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    fire(\"before:highlightElement\",\n      { el: element, language });\n\n    if (element.dataset.highlighted) {\n      console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n      return;\n    }\n\n    // we should be all text, no child nodes (unescaped HTML) - this is possibly\n    // an HTML injection attack - it's likely too late if this is already in\n    // production (the code has likely already done its damage by the time\n    // we're seeing it)... but we yell loudly about this so that hopefully it's\n    // more likely to be caught in development before making it to production\n    if (element.children.length > 0) {\n      if (!options.ignoreUnescapedHTML) {\n        console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n        console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n        console.warn(\"The element with unescaped HTML:\");\n        console.warn(element);\n      }\n      if (options.throwUnescapedHTML) {\n        const err = new HTMLInjectionError(\n          \"One of your code blocks includes unescaped HTML.\",\n          element.innerHTML\n        );\n        throw err;\n      }\n    }\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    element.innerHTML = result.value;\n    element.dataset.highlighted = \"yes\";\n    updateClassName(element, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relevance: result.relevance\n    };\n    if (result.secondBest) {\n      element.secondBest = {\n        language: result.secondBest.language,\n        relevance: result.secondBest.relevance\n      };\n    }\n\n    fire(\"after:highlightElement\", { el: element, result, text });\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {Partial<HLJSOptions>} userOptions\n   */\n  function configure(userOptions) {\n    options = inherit(options, userOptions);\n  }\n\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlighting() deprecated.  Use highlightAll() now.\");\n  };\n\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\");\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll(options.cssSelector);\n    blocks.forEach(highlightElement);\n  }\n\n  function boot() {\n    // if a highlight was requested before DOM was loaded, do now\n    if (wantsHighlight) highlightAll();\n  }\n\n  // make sure we are in the browser environment\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('DOMContentLoaded', boot, false);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function removePlugin(plugin) {\n    const index = plugins.indexOf(plugin);\n    if (index !== -1) {\n      plugins.splice(index, 1);\n    }\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n   * DEPRECATED\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    autoDetection,\n    inherit,\n    addPlugin,\n    removePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  hljs.regex = {\n    concat: concat,\n    lookahead: lookahead,\n    either: either,\n    optional: optional,\n    anyNumberOfTimes: anyNumberOfTimes\n  };\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreeze(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexes into our main object\n  Object.assign(hljs, MODES);\n\n  return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\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); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\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); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n", "import { BaseEvent } from './base-event';\n\nexport interface Identify {\n  getUserProperties(): IdentifyUserProperties;\n  set(property: string, value: ValidPropertyType): Identify;\n  setOnce(property: string, value: ValidPropertyType): Identify;\n  append(property: string, value: ValidPropertyType): Identify;\n  prepend(property: string, value: ValidPropertyType): Identify;\n  postInsert(property: string, value: ValidPropertyType): Identify;\n  preInsert(property: string, value: ValidPropertyType): Identify;\n  remove(property: string, value: ValidPropertyType): Identify;\n  add(property: string, value: number): Identify;\n  unset(property: string): Identify;\n  clearAll(): Identify;\n}\n\nexport enum IdentifyOperation {\n  // Base Operations to set values\n  SET = '$set',\n  SET_ONCE = '$setOnce',\n\n  // Operations around modifying existing values\n  ADD = '$add',\n  APPEND = '$append',\n  PREPEND = '$prepend',\n  REMOVE = '$remove',\n\n  // Operations around appending values *if* they aren't present\n  PREINSERT = '$preInsert',\n  POSTINSERT = '$postInsert',\n\n  // Operations around removing properties/values\n  UNSET = '$unset',\n  CLEAR_ALL = '$clearAll',\n}\n\nexport type ValidPropertyType =\n  | number\n  | string\n  | boolean\n  | Array<string | number>\n  | { [key: string]: ValidPropertyType };\n\ninterface BaseOperationConfig {\n  [key: string]: ValidPropertyType;\n}\n\nexport interface IdentifyUserProperties {\n  // Add operations can only take numbers\n  [IdentifyOperation.ADD]?: { [key: string]: number };\n\n  // This reads the keys of the passed object, but the values are not used\n  [IdentifyOperation.UNSET]?: BaseOperationConfig;\n  // This option does not read the key as it unsets all user properties\n  [IdentifyOperation.CLEAR_ALL]?: any;\n\n  // These operations can take numbers, strings, or arrays of both.\n  [IdentifyOperation.SET]?: BaseOperationConfig;\n  [IdentifyOperation.SET_ONCE]?: BaseOperationConfig;\n  [IdentifyOperation.APPEND]?: BaseOperationConfig;\n  [IdentifyOperation.PREPEND]?: BaseOperationConfig;\n  [IdentifyOperation.POSTINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.PREINSERT]?: BaseOperationConfig;\n  [IdentifyOperation.REMOVE]?: BaseOperationConfig;\n}\n\nexport interface Revenue {\n  getEventProperties(): RevenueEventProperties;\n  setProductId(productId: string): Revenue;\n  setQuantity(quantity: number): Revenue;\n  setPrice(price: number): Revenue;\n  setRevenueType(revenueType: string): Revenue;\n  setEventProperties(properties: { [key: string]: any }): Revenue;\n  setRevenue(revenue: number): Revenue;\n}\n\nexport enum RevenueProperty {\n  REVENUE_PRODUCT_ID = '$productId',\n  REVENUE_QUANTITY = '$quantity',\n  REVENUE_PRICE = '$price',\n  REVENUE_TYPE = '$revenueType',\n  REVENUE = '$revenue',\n}\n\nexport interface RevenueEventProperties {\n  [RevenueProperty.REVENUE_PRODUCT_ID]?: string;\n  [RevenueProperty.REVENUE_QUANTITY]?: number;\n  [RevenueProperty.REVENUE_PRICE]?: number;\n  [RevenueProperty.REVENUE_TYPE]?: string;\n  [RevenueProperty.REVENUE_TYPE]?: string;\n  [RevenueProperty.REVENUE]?: number;\n}\n\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport enum SpecialEventType {\n  IDENTIFY = '$identify',\n  GROUP_IDENTIFY = '$groupidentify',\n  REVENUE = 'revenue_amount',\n}\n\nexport interface TrackEvent extends BaseEvent {\n  event_type: Exclude<string, SpecialEventType>;\n}\n\nexport interface IdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.IDENTIFY;\n  user_properties:\n    | IdentifyUserProperties\n    | {\n        [key in Exclude<string, IdentifyOperation>]: any;\n      };\n}\n\nexport interface GroupIdentifyEvent extends BaseEvent {\n  event_type: SpecialEventType.GROUP_IDENTIFY;\n  group_properties:\n    | IdentifyUserProperties\n    | {\n        [key in Exclude<string, IdentifyOperation>]: any;\n      };\n}\n\nexport interface RevenueEvent extends BaseEvent {\n  event_type: SpecialEventType.REVENUE;\n  event_properties:\n    | RevenueEventProperties\n    | {\n        [key: string]: any;\n      };\n}\n\nexport type Event = TrackEvent | IdentifyEvent | GroupIdentifyEvent | RevenueEvent;\n", "export interface Logger {\n  disable(): void;\n  enable(logLevel: LogLevel): void;\n  log(...args: any[]): void;\n  warn(...args: any[]): void;\n  error(...args: any[]): void;\n  debug(...args: any[]): void;\n}\n\nexport enum LogLevel {\n  None = 0,\n  Error = 1,\n  Warn = 2,\n  Verbose = 3,\n  Debug = 4,\n}\n\nexport interface LogConfig {\n  logger: Logger;\n  logLevel: LogLevel;\n}\n\ntype TimeKey = 'start' | 'end';\n\nexport interface DebugContext {\n  type: string;\n  name: string;\n  args: string[] | string;\n  stacktrace?: string[] | string;\n  time?: { [key in TimeKey]?: string };\n  states?: { [key: string]: any };\n}\n", "import { Event } from './event';\nimport { Config } from './config';\nimport { Result } from './result';\nimport { CoreClient } from './client/core-client';\n\nexport enum PluginType {\n  BEFORE = 'before',\n  ENRICHMENT = 'enrichment',\n  DESTINATION = 'destination',\n}\n\nexport interface BeforePlugin<T = CoreClient, U = Config> {\n  name: string;\n  type: PluginType.BEFORE | 'before';\n  setup(config: U, client?: T): Promise<void>;\n  execute(context: Event): Promise<Event | null>;\n  teardown?(): Promise<void>;\n}\n\nexport interface EnrichmentPlugin<T = CoreClient, U = Config> {\n  name: string;\n  type: PluginType.ENRICHMENT | 'enrichment';\n  setup(config: U, client?: T): Promise<void>;\n  execute(context: Event): Promise<Event | null>;\n  teardown?(): Promise<void>;\n}\n\nexport interface DestinationPlugin<T = CoreClient, U = Config> {\n  name: string;\n  type: PluginType.DESTINATION | 'destination';\n  setup(config: U, client?: T): Promise<void>;\n  execute(context: Event): Promise<Result>;\n  flush?(): Promise<void>;\n  teardown?(): Promise<void>;\n}\n\nexport type Plugin<T = CoreClient, U = Config> = BeforePlugin<T, U> | EnrichmentPlugin<T, U> | DestinationPlugin<T, U>;\n", "export enum ServerZone {\n  US = 'US',\n  EU = 'EU',\n  STAGING = 'STAGING',\n}\n", "/** The status of an event. */\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 successfully. */\n  Success = 'success',\n  /** A user or device in the payload is currently rate limited and should try again later. */\n  RateLimit = 'rate_limit',\n  /** The sent payload was too large to be processed. */\n  PayloadTooLarge = 'payload_too_large',\n  /** The event could not be processed. */\n  Invalid = 'invalid',\n  /** A server-side error ocurred during submission. */\n  Failed = 'failed',\n  /** a server or client side error occuring when a request takes too long and is cancelled */\n  Timeout = 'Timeout',\n  /** NodeJS runtime environment error.. E.g. disconnected from network */\n  SystemError = 'SystemError',\n}\n", "import { Payload } from './payload';\nimport { Response } from './response';\n\nexport interface Transport {\n  send(serverUrl: string, payload: Payload): Promise<Response | null>;\n}\n\nexport enum TransportType {\n  XHR = 'xhr',\n  SendBeacon = 'beacon',\n  Fetch = 'fetch',\n}\n", "export { AmplitudeReturn } from './amplitude-promise';\nexport { BaseEvent, EventOptions } from './base-event';\nexport {\n  Campaign,\n  CampaignParser,\n  CampaignTracker,\n  CampaignTrackerOptions,\n  CampaignTrackFunction,\n  ClickIdParameters,\n  ReferrerParameters,\n  UTMParameters,\n} from './campaign';\nexport { BrowserClient, ReactNativeClient, NodeClient } from './client';\nexport {\n  AttributionOptions,\n  BrowserConfig,\n  BrowserOptions,\n  Config,\n  DefaultTrackingOptions,\n  Options,\n  NodeConfig,\n  NodeOptions,\n  ReactNativeConfig,\n  ReactNativeOptions,\n  ReactNativeTrackingOptions,\n  TrackingOptions,\n} from './config';\nexport { CoreClient } from './client/core-client';\nexport { DestinationContext } from './destination-context';\nexport {\n  Event,\n  TrackEvent,\n  IdentifyEvent,\n  GroupIdentifyEvent,\n  SpecialEventType,\n  IdentifyOperation,\n  IdentifyUserProperties,\n  ValidPropertyType,\n  Identify,\n  Revenue,\n  RevenueEvent,\n  RevenueProperty,\n  RevenueEventProperties,\n} from './event';\nexport { EventCallback } from './event-callback';\nexport { EventBridge, EventBridgeChannel, EventBridgeContainer, EventBridgeReceiver } from './event-bridge';\nexport { Logger, LogLevel, LogConfig, DebugContext } from './logger';\nexport { Payload } from './payload';\nexport { Plan } from './plan';\nexport { IngestionMetadata } from './ingestion-metadata';\nexport { Plugin, BeforePlugin, EnrichmentPlugin, DestinationPlugin, PluginType } from './plugin';\nexport { Result } from './result';\nexport { Response, SuccessResponse, InvalidResponse, PayloadTooLargeResponse, RateLimitResponse } from './response';\nexport { QueueProxy, InstanceProxy } from './proxy';\nexport { ServerZone } from './server-zone';\nexport { Status } from './status';\nexport { CookieStorageOptions, Storage } from './storage';\nexport { Transport, TransportType } from './transport';\nexport { UserSession } from './user-session';\nexport { UTMData } from './utm';\nexport { PageTrackingOptions, PageTrackingTrackOn, PageTrackingHistoryChanges } from './page-view-tracking';\n", "export const UNSET_VALUE = '-';\nexport const AMPLITUDE_PREFIX = 'AMP';\nexport const STORAGE_PREFIX = `${AMPLITUDE_PREFIX}_unsent`;\nexport const AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport const EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport const AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport const EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n", "const MAX_PROPERTY_KEYS = 1000;\n\nexport const isValidObject = (properties: { [key: string]: any }): boolean => {\n  if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n    return false;\n  }\n  for (const key in properties) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n    const value = properties[key];\n    if (!isValidProperties(key, value)) return false;\n  }\n  return true;\n};\n\nexport const isValidProperties = (property: string, value: any): boolean => {\n  if (typeof property !== 'string') return false;\n  if (Array.isArray(value)) {\n    let isValid = true;\n    for (const valueElement of value) {\n      if (Array.isArray(valueElement)) {\n        return false;\n      } else if (typeof valueElement === 'object') {\n        isValid = isValid && isValidObject(valueElement as object);\n      } else if (!['number', 'string'].includes(typeof valueElement)) {\n        return false;\n      }\n      if (!isValid) {\n        return false;\n      }\n    }\n  } else if (value === null || value === undefined) {\n    return false;\n  } else if (typeof value === 'object') {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n    return isValidObject(value);\n  } else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n    return false;\n  }\n  return true;\n};\n", "import {\n  IdentifyOperation,\n  IdentifyUserProperties,\n  ValidPropertyType,\n  Identify as IIdentify,\n} from '@amplitude/analytics-types';\nimport { UNSET_VALUE } from './constants';\nimport { isValidProperties } from './utils/valid-properties';\n\nexport class Identify implements IIdentify {\n  protected readonly _propertySet: Set<string> = new Set<string>();\n  protected _properties: IdentifyUserProperties = {};\n\n  public getUserProperties(): IdentifyUserProperties {\n    return { ...this._properties };\n  }\n\n  public set(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET, property, value);\n    return this;\n  }\n\n  public setOnce(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n    return this;\n  }\n\n  public append(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.APPEND, property, value);\n    return this;\n  }\n\n  public prepend(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREPEND, property, value);\n    return this;\n  }\n\n  public postInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n    return this;\n  }\n\n  public preInsert(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.PREINSERT, property, value);\n    return this;\n  }\n\n  public remove(property: string, value: ValidPropertyType): Identify {\n    this._safeSet(IdentifyOperation.REMOVE, property, value);\n    return this;\n  }\n\n  public add(property: string, value: number): Identify {\n    this._safeSet(IdentifyOperation.ADD, property, value);\n    return this;\n  }\n\n  public unset(property: string): Identify {\n    this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n    return this;\n  }\n\n  public clearAll(): Identify {\n    // When clear all happens, all properties are unset. Reset the entire object.\n    this._properties = {};\n    this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n\n    return this;\n  }\n\n  // Returns whether or not this set actually worked.\n  private _safeSet(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._validate(operation, property, value)) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      let userPropertyMap: any = this._properties[operation];\n      if (userPropertyMap === undefined) {\n        userPropertyMap = {};\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n        this._properties[operation] = userPropertyMap;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      userPropertyMap[property] = value;\n      this._propertySet.add(property);\n      return true;\n    }\n\n    return false;\n  }\n\n  private _validate(operation: IdentifyOperation, property: string, value: ValidPropertyType): boolean {\n    if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n      // clear all already set. Skipping operation;\n      return false;\n    }\n\n    if (this._propertySet.has(property)) {\n      // Property already used. Skipping operation\n      return false;\n    }\n\n    if (operation === IdentifyOperation.ADD) {\n      return typeof value === 'number';\n    }\n\n    if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n      return isValidProperties(property, value);\n    }\n    return true;\n  }\n}\n", "import {\n  BaseEvent,\n  TrackEvent,\n  IdentifyEvent,\n  GroupIdentifyEvent,\n  SpecialEventType,\n  Identify as IIdentify,\n  Revenue,\n  RevenueEvent,\n  EventOptions,\n} from '@amplitude/analytics-types';\nimport { Identify } from '../identify';\n\nexport const createTrackEvent = (\n  eventInput: BaseEvent | string,\n  eventProperties?: Record<string, any>,\n  eventOptions?: EventOptions,\n): TrackEvent => {\n  const baseEvent: BaseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n  return {\n    ...baseEvent,\n    ...eventOptions,\n    ...(eventProperties && { event_properties: eventProperties }),\n  };\n};\n\nexport const createIdentifyEvent = (identify: IIdentify, eventOptions?: EventOptions): IdentifyEvent => {\n  const identifyEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n  };\n\n  return identifyEvent;\n};\n\nexport const createGroupIdentifyEvent = (\n  groupType: string,\n  groupName: string | string[],\n  identify: IIdentify,\n  eventOptions?: EventOptions,\n): GroupIdentifyEvent => {\n  const groupIdentify: GroupIdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.GROUP_IDENTIFY,\n    group_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n\n  return groupIdentify;\n};\n\nexport const createGroupEvent = (groupType: string, groupName: string | string[], eventOptions?: EventOptions) => {\n  const identify = new Identify();\n  identify.set(groupType, groupName);\n\n  const groupEvent: IdentifyEvent = {\n    ...eventOptions,\n    event_type: SpecialEventType.IDENTIFY,\n    user_properties: identify.getUserProperties(),\n    groups: {\n      [groupType]: groupName,\n    },\n  };\n  return groupEvent;\n};\n\nexport const createRevenueEvent = (revenue: Revenue, eventOptions?: EventOptions): RevenueEvent => {\n  return {\n    ...eventOptions,\n    event_type: SpecialEventType.REVENUE,\n    event_properties: revenue.getEventProperties(),\n  };\n};\n", "import { Event, Result, Status } from '@amplitude/analytics-types';\n\nexport const buildResult = (event: Event, code = 0, message: string = Status.Unknown): Result => {\n  return { event, code, message };\n};\n", "import {\n  BeforePlugin,\n  Config,\n  CoreClient,\n  DestinationPlugin,\n  EnrichmentPlugin,\n  Event,\n  EventCallback,\n  Plugin,\n  PluginType,\n  Result,\n} from '@amplitude/analytics-types';\nimport { buildResult } from './utils/result-khulnasoft';\n\nexport class Timeline {\n  queue: [Event, EventCallback][] = [];\n  // Flag to guarantee one schedule apply is running\n  applying = false;\n  // Flag indicates whether timeline is ready to process event\n  // Events collected before timeline is ready will stay in the queue to be processed later\n  plugins: Plugin[] = [];\n\n  constructor(private client: CoreClient) {}\n\n  async register(plugin: Plugin, config: Config) {\n    await plugin.setup(config, this.client);\n    this.plugins.push(plugin);\n  }\n\n  async deregister(pluginName: string) {\n    const index = this.plugins.findIndex((plugin) => plugin.name === pluginName);\n    const plugin = this.plugins[index];\n    this.plugins.splice(index, 1);\n    await plugin.teardown?.();\n  }\n\n  reset(client: CoreClient) {\n    this.applying = false;\n    const plugins = this.plugins;\n    plugins.map((plugin) => plugin.teardown?.());\n    this.plugins = [];\n    this.client = client;\n  }\n\n  push(event: Event) {\n    return new Promise<Result>((resolve) => {\n      this.queue.push([event, resolve]);\n      this.scheduleApply(0);\n    });\n  }\n\n  scheduleApply(timeout: number) {\n    if (this.applying) return;\n    this.applying = true;\n    setTimeout(() => {\n      void this.apply(this.queue.shift()).then(() => {\n        this.applying = false;\n        if (this.queue.length > 0) {\n          this.scheduleApply(0);\n        }\n      });\n    }, timeout);\n  }\n\n  async apply(item: [Event, EventCallback] | undefined) {\n    if (!item) {\n      return;\n    }\n\n    let [event] = item;\n    const [, resolve] = item;\n\n    const before = this.plugins.filter<BeforePlugin>(\n      (plugin: Plugin): plugin is BeforePlugin => plugin.type === PluginType.BEFORE,\n    );\n\n    for (const plugin of before) {\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n      }\n    }\n\n    const enrichment = this.plugins.filter<EnrichmentPlugin>(\n      (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === PluginType.ENRICHMENT,\n    );\n\n    for (const plugin of enrichment) {\n      const e = await plugin.execute({ ...event });\n      if (e === null) {\n        resolve({ event, code: 0, message: '' });\n        return;\n      } else {\n        event = e;\n      }\n    }\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n    );\n\n    const executeDestinations = destination.map((plugin) => {\n      const eventClone = { ...event };\n      return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n    });\n\n    void Promise.all(executeDestinations).then(([result]) => {\n      resolve(result);\n    });\n\n    return;\n  }\n\n  async flush() {\n    const queue = this.queue;\n    this.queue = [];\n\n    await Promise.all(queue.map((item) => this.apply(item)));\n\n    const destination = this.plugins.filter<DestinationPlugin>(\n      (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n    );\n\n    const executeDestinations = destination.map((plugin) => {\n      return plugin.flush && plugin.flush();\n    });\n\n    await Promise.all(executeDestinations);\n  }\n}\n", "export const SUCCESS_MESSAGE = 'Event tracked successfully';\nexport const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport const OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport const MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport const INVALID_API_KEY = 'Invalid API key';\nexport const CLIENT_NOT_INITIALIZED = 'Client not initialized';\n", "import { AmplitudeReturn } from '@amplitude/analytics-types';\n\nexport const returnWrapper: {\n  (): AmplitudeReturn<void>;\n  <T>(awaitable: Promise<T>): AmplitudeReturn<T>;\n} = <T>(awaitable?: Promise<T>) => ({\n  promise: awaitable || Promise.resolve(),\n});\n", "import {\n  CoreClient,\n  Config,\n  Event,\n  BaseEvent,\n  EventOptions,\n  Identify,\n  Plugin,\n  Revenue,\n  Result,\n} from '@amplitude/analytics-types';\nimport {\n  createGroupIdentifyEvent,\n  createIdentifyEvent,\n  createTrackEvent,\n  createRevenueEvent,\n  createGroupEvent,\n} from './utils/event-khulnasoft';\nimport { Timeline } from './timeline';\nimport { buildResult } from './utils/result-khulnasoft';\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './messages';\nimport { returnWrapper } from './utils/return-wrapper';\n\nexport class AmplitudeCore implements CoreClient {\n  protected initializing = false;\n  protected name: string;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: Config;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  timeline: Timeline;\n  protected q: CallableFunction[] = [];\n  protected dispatchQ: CallableFunction[] = [];\n\n  constructor(name = '$default') {\n    this.timeline = new Timeline(this);\n    this.name = name;\n  }\n\n  protected async _init(config: Config) {\n    this.config = config;\n    this.timeline.reset(this);\n    await this.runQueuedFunctions('q');\n  }\n\n  async runQueuedFunctions(queueName: 'q' | 'dispatchQ') {\n    const queuedFunctions = this[queueName];\n    this[queueName] = [];\n    for (const queuedFunction of queuedFunctions) {\n      await queuedFunction();\n    }\n  }\n\n  track(eventInput: BaseEvent | string, eventProperties?: Record<string, any>, eventOptions?: EventOptions) {\n    const event = createTrackEvent(eventInput, eventProperties, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  logEvent = this.track.bind(this);\n\n  identify(identify: Identify, eventOptions?: EventOptions) {\n    const event = createIdentifyEvent(identify, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  groupIdentify(groupType: string, groupName: string | string[], identify: Identify, eventOptions?: EventOptions) {\n    const event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  setGroup(groupType: string, groupName: string | string[], eventOptions?: EventOptions) {\n    const event = createGroupEvent(groupType, groupName, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  revenue(revenue: Revenue, eventOptions?: EventOptions) {\n    const event = createRevenueEvent(revenue, eventOptions);\n    return returnWrapper(this.dispatch(event));\n  }\n\n  add(plugin: Plugin) {\n    if (!this.config) {\n      this.q.push(this.add.bind(this, plugin));\n      return returnWrapper();\n    }\n    return returnWrapper(this.timeline.register(plugin, this.config));\n  }\n\n  remove(pluginName: string) {\n    if (!this.config) {\n      this.q.push(this.remove.bind(this, pluginName));\n      return returnWrapper();\n    }\n    return returnWrapper(this.timeline.deregister(pluginName));\n  }\n\n  dispatchWithCallback(event: Event, callback: (result: Result) => void): void {\n    if (!this.config) {\n      return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n    }\n    void this.process(event).then(callback);\n  }\n\n  async dispatch(event: Event): Promise<Result> {\n    if (!this.config) {\n      return new Promise<Result>((resolve) => {\n        this.dispatchQ.push(this.dispatchWithCallback.bind(this, event, resolve));\n      });\n    }\n\n    return this.process(event);\n  }\n\n  async process(event: Event): Promise<Result> {\n    try {\n      // skip event processing if opt out\n      if (this.config.optOut) {\n        return buildResult(event, 0, OPT_OUT_MESSAGE);\n      }\n\n      const result = await this.timeline.push(event);\n\n      result.code === 200\n        ? this.config.loggerProvider.log(result.message)\n        : this.config.loggerProvider.error(result.message);\n\n      return result;\n    } catch (e) {\n      this.config.loggerProvider.error(e);\n      const message = String(e);\n      const result = buildResult(event, 0, message);\n\n      return result;\n    }\n  }\n\n  setOptOut(optOut: boolean) {\n    if (!this.config) {\n      this.q.push(this.setOptOut.bind(this, Boolean(optOut)));\n      return;\n    }\n    this.config.optOut = Boolean(optOut);\n  }\n\n  flush() {\n    return returnWrapper(this.timeline.flush());\n  }\n}\n", "import {\n  RevenueProperty,\n  RevenueEventProperties,\n  Revenue as IRevenue,\n  ValidPropertyType,\n} from '@amplitude/analytics-types';\nimport { isValidObject } from './utils/valid-properties';\n\nexport class Revenue implements IRevenue {\n  private productId: string;\n  private quantity: number;\n  private price: number;\n  private revenueType?: string;\n  private properties?: { [key: string]: any };\n  private revenue?: number;\n\n  constructor() {\n    this.productId = '';\n    this.quantity = 1;\n    this.price = 0.0;\n  }\n\n  setProductId(productId: string) {\n    this.productId = productId;\n    return this;\n  }\n\n  setQuantity(quantity: number) {\n    if (quantity > 0) {\n      this.quantity = quantity;\n    }\n    return this;\n  }\n\n  setPrice(price: number) {\n    this.price = price;\n    return this;\n  }\n\n  setRevenueType(revenueType: string) {\n    this.revenueType = revenueType;\n    return this;\n  }\n\n  setRevenue(revenue: number) {\n    this.revenue = revenue;\n    return this;\n  }\n\n  setEventProperties(properties: { [key: string]: ValidPropertyType }) {\n    if (isValidObject(properties)) {\n      this.properties = properties;\n    }\n    return this;\n  }\n\n  getEventProperties(): RevenueEventProperties {\n    const eventProperties: RevenueEventProperties = this.properties ? { ...this.properties } : {};\n    eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n    eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n    eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n    eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n    eventProperties[RevenueProperty.REVENUE] = this.revenue;\n    return eventProperties;\n  }\n}\n", "// Creates an array of elements split into groups the length of size.\n// If array can't be split evenly, the final chunk will be the remaining elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\n\nexport const chunk = <T>(arr: T[], size: number) => {\n  const chunkSize = Math.max(size, 1);\n  return arr.reduce<T[][]>((chunks, element, index) => {\n    const chunkIndex = Math.floor(index / chunkSize);\n    if (!chunks[chunkIndex]) {\n      chunks[chunkIndex] = [];\n    }\n    chunks[chunkIndex].push(element);\n    return chunks;\n  }, []);\n};\n", "import { LogLevel, Logger as ILogger } from '@amplitude/analytics-types';\n\nconst PREFIX = 'Amplitude Logger ';\n\nexport class Logger implements ILogger {\n  logLevel: LogLevel;\n\n  constructor() {\n    this.logLevel = LogLevel.None;\n  }\n\n  disable(): void {\n    this.logLevel = LogLevel.None;\n  }\n\n  enable(logLevel: LogLevel = LogLevel.Warn): void {\n    this.logLevel = logLevel;\n  }\n\n  log(...args: any[]): void {\n    if (this.logLevel < LogLevel.Verbose) {\n      return;\n    }\n    console.log(`${PREFIX}[Log]: ${args.join(' ')}`);\n  }\n\n  warn(...args: any[]): void {\n    if (this.logLevel < LogLevel.Warn) {\n      return;\n    }\n    console.warn(`${PREFIX}[Warn]: ${args.join(' ')}`);\n  }\n\n  error(...args: any[]): void {\n    if (this.logLevel < LogLevel.Error) {\n      return;\n    }\n    console.error(`${PREFIX}[Error]: ${args.join(' ')}`);\n  }\n\n  debug(...args: any[]): void {\n    if (this.logLevel < LogLevel.Debug) {\n      return;\n    }\n    // console.debug output is hidden by default in chrome\n    console.log(`${PREFIX}[Debug]: ${args.join(' ')}`);\n  }\n}\n", "import {\n  Event,\n  Config as IConfig,\n  Logger as ILogger,\n  LogLevel,\n  Storage,\n  Transport,\n  Plan,\n  IngestionMetadata,\n  ServerZone,\n  Options,\n} from '@amplitude/analytics-types';\nimport {\n  AMPLITUDE_SERVER_URL,\n  AMPLITUDE_BATCH_SERVER_URL,\n  EU_AMPLITUDE_SERVER_URL,\n  EU_AMPLITUDE_BATCH_SERVER_URL,\n} from './constants';\n\nimport { Logger } from './logger';\n\nexport const getDefaultConfig = () => ({\n  flushMaxRetries: 12,\n  flushQueueSize: 200,\n  flushIntervalMillis: 10000,\n  instanceName: '$default_instance',\n  logLevel: LogLevel.Warn,\n  loggerProvider: new Logger(),\n  optOut: false,\n  serverUrl: AMPLITUDE_SERVER_URL,\n  serverZone: ServerZone.US,\n  useBatch: false,\n});\n\nexport class Config implements IConfig {\n  apiKey: string;\n  flushIntervalMillis: number;\n  flushMaxRetries: number;\n  flushQueueSize: number;\n  instanceName?: string;\n  loggerProvider: ILogger;\n  logLevel: LogLevel;\n  minIdLength?: number;\n  plan?: Plan;\n  ingestionMetadata?: IngestionMetadata;\n  serverUrl: string | undefined;\n  serverZone?: keyof typeof ServerZone;\n  transportProvider: Transport;\n  storageProvider?: Storage<Event[]>;\n  useBatch: boolean;\n\n  protected _optOut = false;\n  get optOut() {\n    return this._optOut;\n  }\n  set optOut(optOut: boolean) {\n    this._optOut = optOut;\n  }\n\n  constructor(options: Options) {\n    const defaultConfig = getDefaultConfig();\n    this.apiKey = options.apiKey;\n    this.flushIntervalMillis = options.flushIntervalMillis ?? defaultConfig.flushIntervalMillis;\n    this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n    this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n    this.instanceName = options.instanceName || defaultConfig.instanceName;\n    this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n    this.logLevel = options.logLevel ?? defaultConfig.logLevel;\n    this.minIdLength = options.minIdLength;\n    this.plan = options.plan;\n    this.ingestionMetadata = options.ingestionMetadata;\n    this.optOut = options.optOut ?? defaultConfig.optOut;\n    this.serverUrl = options.serverUrl;\n    this.serverZone = options.serverZone || defaultConfig.serverZone;\n    this.storageProvider = options.storageProvider;\n    this.transportProvider = options.transportProvider;\n    this.useBatch = options.useBatch ?? defaultConfig.useBatch;\n    this.loggerProvider.enable(this.logLevel);\n\n    const serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n    this.serverZone = serverConfig.serverZone;\n    this.serverUrl = serverConfig.serverUrl;\n  }\n}\n\nexport const getServerUrl = (serverZone: keyof typeof ServerZone, useBatch: boolean) => {\n  if (serverZone === ServerZone.EU) {\n    return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n  }\n  return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\n\nexport const createServerConfig = (\n  serverUrl = '',\n  serverZone: keyof typeof ServerZone = getDefaultConfig().serverZone,\n  useBatch: boolean = getDefaultConfig().useBatch,\n) => {\n  if (serverUrl) {\n    return { serverUrl, serverZone: undefined };\n  }\n  const _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n  return {\n    serverZone: _serverZone,\n    serverUrl: getServerUrl(_serverZone, useBatch),\n  };\n};\n", "import {\n  Config,\n  DestinationContext as Context,\n  DestinationPlugin,\n  Event,\n  InvalidResponse,\n  PayloadTooLargeResponse,\n  PluginType,\n  RateLimitResponse,\n  Response,\n  Result,\n  Status,\n  SuccessResponse,\n} from '@amplitude/analytics-types';\nimport {\n  INVALID_API_KEY,\n  MAX_RETRIES_EXCEEDED_MESSAGE,\n  MISSING_API_KEY_MESSAGE,\n  SUCCESS_MESSAGE,\n  UNEXPECTED_ERROR_MESSAGE,\n} from '../messages';\nimport { STORAGE_PREFIX } from '../constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-khulnasoft';\nimport { createServerConfig } from '../config';\n\nfunction getErrorMessage(error: unknown) {\n  if (error instanceof Error) return error.message;\n  return String(error);\n}\n\nexport function getResponseBodyString(res: Response) {\n  let responseBodyString = '';\n  try {\n    if ('body' in res) {\n      responseBodyString = JSON.stringify(res.body);\n    }\n  } catch {\n    // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n  }\n  return responseBodyString;\n}\n\nexport class Destination implements DestinationPlugin {\n  name = 'amplitude';\n  type = PluginType.DESTINATION as const;\n\n  retryTimeout = 1000;\n  throttleTimeout = 30000;\n  storageKey = '';\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: Config;\n  private scheduled: ReturnType<typeof setTimeout> | null = null;\n  queue: Context[] = [];\n\n  async setup(config: Config): Promise<undefined> {\n    this.config = config;\n\n    this.storageKey = `${STORAGE_PREFIX}_${this.config.apiKey.substring(0, 10)}`;\n    const unsent = await this.config.storageProvider?.get(this.storageKey);\n    this.saveEvents(); // sets storage to '[]'\n    if (unsent && unsent.length > 0) {\n      void Promise.all(unsent.map((event) => this.execute(event))).catch();\n    }\n\n    return Promise.resolve(undefined);\n  }\n\n  execute(event: Event): Promise<Result> {\n    return new Promise((resolve) => {\n      const context = {\n        event,\n        attempts: 0,\n        callback: (result: Result) => resolve(result),\n        timeout: 0,\n      };\n      void this.addToQueue(context);\n    });\n  }\n\n  addToQueue(...list: Context[]) {\n    const tryable = list.filter((context) => {\n      if (context.attempts < this.config.flushMaxRetries) {\n        context.attempts += 1;\n        return true;\n      }\n      void this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n      return false;\n    });\n\n    tryable.forEach((context) => {\n      this.queue = this.queue.concat(context);\n      if (context.timeout === 0) {\n        this.schedule(this.config.flushIntervalMillis);\n        return;\n      }\n\n      setTimeout(() => {\n        context.timeout = 0;\n        this.schedule(0);\n      }, context.timeout);\n    });\n\n    this.saveEvents();\n  }\n\n  schedule(timeout: number) {\n    if (this.scheduled) return;\n    this.scheduled = setTimeout(() => {\n      void this.flush(true).then(() => {\n        if (this.queue.length > 0) {\n          this.schedule(timeout);\n        }\n      });\n    }, timeout);\n  }\n\n  async flush(useRetry = false) {\n    const list: Context[] = [];\n    const later: Context[] = [];\n    this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n    this.queue = later;\n\n    if (this.scheduled) {\n      clearTimeout(this.scheduled);\n      this.scheduled = null;\n    }\n\n    const batches = chunk(list, this.config.flushQueueSize);\n    await Promise.all(batches.map((batch) => this.send(batch, useRetry)));\n  }\n\n  async send(list: Context[], useRetry = true) {\n    if (!this.config.apiKey) {\n      return this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE);\n    }\n\n    const payload = {\n      api_key: this.config.apiKey,\n      events: list.map((context) => {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { extra, ...eventWithoutExtra } = context.event;\n        return eventWithoutExtra;\n      }),\n      options: {\n        min_id_length: this.config.minIdLength,\n      },\n    };\n\n    try {\n      const { serverUrl } = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch);\n      const res = await this.config.transportProvider.send(serverUrl, payload);\n      if (res === null) {\n        this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n        return;\n      }\n      if (!useRetry) {\n        if ('body' in res) {\n          this.fulfillRequest(list, res.statusCode, `${res.status}: ${getResponseBodyString(res)}`);\n        } else {\n          this.fulfillRequest(list, res.statusCode, res.status);\n        }\n        return;\n      }\n      this.handleResponse(res, list);\n    } catch (e) {\n      this.config.loggerProvider.error(e);\n      const errorMessage = getErrorMessage(e);\n      this.fulfillRequest(list, 0, errorMessage);\n    }\n  }\n\n  handleResponse(res: Response, list: Context[]) {\n    const { status } = res;\n\n    switch (status) {\n      case Status.Success: {\n        this.handleSuccessResponse(res, list);\n        break;\n      }\n      case Status.Invalid: {\n        this.handleInvalidResponse(res, list);\n        break;\n      }\n      case Status.PayloadTooLarge: {\n        this.handlePayloadTooLargeResponse(res, list);\n        break;\n      }\n      case Status.RateLimit: {\n        this.handleRateLimitResponse(res, list);\n        break;\n      }\n      default: {\n        // log intermediate event status before retry\n        this.config.loggerProvider.warn(`{code: 0, error: \"Status '${status}' provided for ${list.length} events\"}`);\n\n        this.handleOtherResponse(list);\n        break;\n      }\n    }\n  }\n\n  handleSuccessResponse(res: SuccessResponse, list: Context[]) {\n    this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n  }\n\n  handleInvalidResponse(res: InvalidResponse, list: Context[]) {\n    if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    const dropIndex = [\n      ...Object.values(res.body.eventsWithInvalidFields),\n      ...Object.values(res.body.eventsWithMissingFields),\n      ...Object.values(res.body.eventsWithInvalidIdLengths),\n      ...res.body.silencedEvents,\n    ].flat();\n    const dropIndexSet = new Set(dropIndex);\n\n    const retry = list.filter((context, index) => {\n      if (dropIndexSet.has(index)) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n    this.addToQueue(...retry);\n  }\n\n  handlePayloadTooLargeResponse(res: PayloadTooLargeResponse, list: Context[]) {\n    if (list.length === 1) {\n      this.fulfillRequest(list, res.statusCode, res.body.error);\n      return;\n    }\n\n    // log intermediate event status before retry\n    this.config.loggerProvider.warn(getResponseBodyString(res));\n\n    this.config.flushQueueSize /= 2;\n    this.addToQueue(...list);\n  }\n\n  handleRateLimitResponse(res: RateLimitResponse, list: Context[]) {\n    const dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n    const dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n    const throttledIndex = res.body.throttledEvents;\n    const dropUserIdsSet = new Set(dropUserIds);\n    const dropDeviceIdsSet = new Set(dropDeviceIds);\n    const throttledIndexSet = new Set(throttledIndex);\n\n    const retry = list.filter((context, index) => {\n      if (\n        (context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n        (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))\n      ) {\n        this.fulfillRequest([context], res.statusCode, res.body.error);\n        return;\n      }\n      if (throttledIndexSet.has(index)) {\n        context.timeout = this.throttleTimeout;\n      }\n      return true;\n    });\n\n    if (retry.length > 0) {\n      // log intermediate event status before retry\n      this.config.loggerProvider.warn(getResponseBodyString(res));\n    }\n\n    this.addToQueue(...retry);\n  }\n\n  handleOtherResponse(list: Context[]) {\n    this.addToQueue(\n      ...list.map((context) => {\n        context.timeout = context.attempts * this.retryTimeout;\n        return context;\n      }),\n    );\n  }\n\n  fulfillRequest(list: Context[], code: number, message: string) {\n    this.saveEvents();\n    list.forEach((context) => context.callback(buildResult(context.event, code, message)));\n  }\n\n  /**\n   * Saves events to storage\n   * This is called on\n   * 1) new events are added to queue; or\n   * 2) response comes back for a request\n   */\n  saveEvents() {\n    if (!this.config.storageProvider) {\n      return;\n    }\n    const events = Array.from(this.queue.map((context) => context.event));\n    void this.config.storageProvider.set(this.storageKey, events);\n  }\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { LogLevel, LogConfig, DebugContext } from '@amplitude/analytics-types';\nimport { AmplitudeCore } from '../core-client';\n\nexport const getStacktrace = (ignoreDepth = 0): string[] => {\n  const trace = new Error().stack || '';\n  return trace\n    .split('\\n')\n    .slice(2 + ignoreDepth)\n    .map((text) => text.trim());\n};\n\n// This hook makes sure we always get the latest logger and logLevel.\nexport const getClientLogConfig = (client: AmplitudeCore) => (): LogConfig => {\n  const { loggerProvider: logger, logLevel } = { ...client.config };\n  return {\n    logger,\n    logLevel,\n  };\n};\n\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport const getValueByStringPath = (obj: any, path: string): any => {\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n  path = path.replace(/^\\./, ''); // strip a leading dot\n  for (const attr of path.split('.')) {\n    if (attr in obj) {\n      obj = obj[attr];\n    } else {\n      return;\n    }\n  }\n  return obj;\n};\n\nexport const getClientStates = (client: AmplitudeCore, paths: Array<string>) => (): { [key: string]: any } => {\n  const res: { [key: string]: any } = {};\n  for (const path of paths) {\n    res[path] = getValueByStringPath(client, path);\n  }\n  return res;\n};\n\nexport const debugWrapper =\n  <T extends Array<any>, R>(\n    fn: (...args: T) => R,\n    fnName: string,\n    getLogConfig: () => LogConfig,\n    getStates?: () => { [key: string]: any },\n    fnContext: any = null,\n  ) =>\n  (...args: T): R => {\n    const { logger, logLevel } = getLogConfig();\n    // return early if possible to reduce overhead\n    if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n      return fn.apply(fnContext, args);\n    }\n    const debugContext: DebugContext = {\n      type: 'invoke public method',\n      name: fnName,\n      args,\n      stacktrace: getStacktrace(1),\n      time: {\n        start: new Date().toISOString(),\n      },\n      states: {},\n    };\n    if (getStates && debugContext.states) {\n      debugContext.states.before = getStates();\n    }\n    const result = fn.apply(fnContext, args);\n    if (result && (result as any).promise) {\n      // if result is a promise, add the callback\n      (result as any).promise.then(() => {\n        if (getStates && debugContext.states) {\n          debugContext.states.after = getStates();\n        }\n        if (debugContext.time) {\n          debugContext.time.end = new Date().toISOString();\n        }\n        logger.debug(JSON.stringify(debugContext, null, 2));\n      });\n    } else {\n      if (getStates && debugContext.states) {\n        debugContext.states.after = getStates();\n      }\n      if (debugContext.time) {\n        debugContext.time.end = new Date().toISOString();\n      }\n      logger.debug(JSON.stringify(debugContext, null, 2));\n    }\n    return result;\n  };\n", "/**\n * Source: [jed's gist]{@link https://gist.github.com/982883}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nexport const UUID = function (a?: any): string {\n  return a // if the placeholder was passed, return\n    ? // a random number from 0 to 15\n      (\n        a ^ // unless b is 8,\n        ((Math.random() * // in which case\n          16) >> // a random number from\n          (a / 4))\n      ) // 8 to 11\n        .toString(16) // in hexadecimal\n    : // or otherwise a concatenated string:\n      (\n        String(1e7) + // 10000000 +\n        String(-1e3) + // -1000 +\n        String(-4e3) + // -4000 +\n        String(-8e3) + // -80000000 +\n        String(-1e11)\n      ) // -100000000000,\n        .replace(\n          // replacing\n          /[018]/g, // zeroes, ones, and eights with\n          UUID, // random hex digits\n        );\n};\n", "import { Storage } from '@amplitude/analytics-types';\n\nexport class MemoryStorage<T> implements Storage<T> {\n  memoryStorage: Map<string, T> = new Map();\n\n  async isEnabled(): Promise<boolean> {\n    return true;\n  }\n\n  async get(key: string): Promise<T | undefined> {\n    return this.memoryStorage.get(key);\n  }\n\n  async getRaw(key: string): Promise<string | undefined> {\n    const value = await this.get(key);\n    return value ? JSON.stringify(value) : undefined;\n  }\n\n  async set(key: string, value: T): Promise<void> {\n    this.memoryStorage.set(key, value);\n  }\n\n  async remove(key: string): Promise<void> {\n    this.memoryStorage.delete(key);\n  }\n\n  async reset(): Promise<void> {\n    this.memoryStorage.clear();\n  }\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { Payload, Response, Status, Transport } from '@amplitude/analytics-types';\n\nexport class BaseTransport implements Transport {\n  send(_serverUrl: string, _payload: Payload): Promise<Response | null> {\n    return Promise.resolve(null);\n  }\n\n  buildResponse(responseJSON: Record<string, any>): Response | null {\n    if (typeof responseJSON !== 'object') {\n      return null;\n    }\n\n    const statusCode = responseJSON.code || 0;\n    const status = this.buildStatus(statusCode);\n\n    switch (status) {\n      case Status.Success:\n        return {\n          status,\n          statusCode,\n          body: {\n            eventsIngested: responseJSON.events_ingested ?? 0,\n            payloadSizeBytes: responseJSON.payload_size_bytes ?? 0,\n            serverUploadTime: responseJSON.server_upload_time ?? 0,\n          },\n        };\n\n      case Status.Invalid:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n            missingField: responseJSON.missing_field ?? '',\n            eventsWithInvalidFields: responseJSON.events_with_invalid_fields ?? {},\n            eventsWithMissingFields: responseJSON.events_with_missing_fields ?? {},\n            eventsWithInvalidIdLengths: responseJSON.events_with_invalid_id_lengths ?? {},\n            epsThreshold: responseJSON.eps_threshold ?? 0,\n            exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n            silencedDevices: responseJSON.silenced_devices ?? [],\n            silencedEvents: responseJSON.silenced_events ?? [],\n            throttledDevices: responseJSON.throttled_devices ?? {},\n            throttledEvents: responseJSON.throttled_events ?? [],\n          },\n        };\n      case Status.PayloadTooLarge:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n          },\n        };\n      case Status.RateLimit:\n        return {\n          status,\n          statusCode,\n          body: {\n            error: responseJSON.error ?? '',\n            epsThreshold: responseJSON.eps_threshold ?? 0,\n            throttledDevices: responseJSON.throttled_devices ?? {},\n            throttledUsers: responseJSON.throttled_users ?? {},\n            exceededDailyQuotaDevices: responseJSON.exceeded_daily_quota_devices ?? {},\n            exceededDailyQuotaUsers: responseJSON.exceeded_daily_quota_users ?? {},\n            throttledEvents: responseJSON.throttled_events ?? [],\n          },\n        };\n      case Status.Timeout:\n      default:\n        return {\n          status,\n          statusCode,\n        };\n    }\n  }\n\n  buildStatus(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 === 413) {\n      return Status.PayloadTooLarge;\n    }\n\n    if (code === 408) {\n      return Status.Timeout;\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", "export { AmplitudeCore } from './core-client';\nexport { Identify } from './identify';\nexport { Revenue } from './revenue';\nexport { Destination } from './plugins/destination';\nexport { Config } from './config';\nexport { Logger } from './logger';\nexport { AMPLITUDE_PREFIX, STORAGE_PREFIX } from './constants';\nexport { returnWrapper } from './utils/return-wrapper';\nexport { debugWrapper, getClientLogConfig, getClientStates } from './utils/debug';\nexport { UUID } from './utils/uuid';\nexport { MemoryStorage } from './storage/memory';\nexport { BaseTransport } from './transports/base';\nexport { createIdentifyEvent } from './utils/event-khulnasoft';\n", "export const VERSION = '1.3.5';\n", "import { BeforePlugin, NodeConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport { UUID } from '@amplitude/analytics-core';\nimport { VERSION } from '../version';\n\nexport class Context implements BeforePlugin {\n  name = 'context';\n  type = PluginType.BEFORE as const;\n\n  // this.config is defined in setup() which will always be called first\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: NodeConfig;\n  eventId = 0;\n  library = `amplitude-node-ts/${VERSION}`;\n\n  setup(config: NodeConfig): Promise<undefined> {\n    this.config = config;\n    return Promise.resolve(undefined);\n  }\n\n  execute(context: Event): Promise<Event> {\n    return new Promise((resolve) => {\n      const time = new Date().getTime();\n\n      const contextEvent: Event = {\n        time,\n        insert_id: UUID(),\n        plan: this.config.plan,\n        ...(this.config.ingestionMetadata && {\n          ingestion_metadata: {\n            source_name: this.config.ingestionMetadata.sourceName,\n            source_version: this.config.ingestionMetadata.sourceVersion,\n          },\n        }),\n        ...context,\n        event_id: this.eventId++,\n        library: this.library,\n      };\n      return resolve(contextEvent);\n    });\n  }\n}\n", "import { Payload, Response, Transport } from '@amplitude/analytics-types';\nimport { BaseTransport } from '@amplitude/analytics-core';\nimport * as http from 'http';\nimport * as https from 'https';\n\nexport class Http extends BaseTransport implements Transport {\n  send(serverUrl: string, payload: Payload): Promise<Response | null> {\n    let protocol: typeof http | typeof https;\n    if (serverUrl.startsWith('http://')) {\n      protocol = http;\n    } else if (serverUrl.startsWith('https://')) {\n      protocol = https;\n    } else {\n      throw new Error('Invalid server url');\n    }\n\n    const url = new URL(serverUrl);\n    const requestPayload = JSON.stringify(payload);\n    const options = {\n      headers: {\n        'Content-Type': 'application/json',\n        'Content-Length': Buffer.byteLength(requestPayload),\n      },\n      hostname: url.hostname,\n      method: 'POST',\n      path: url.pathname,\n      port: url.port,\n      protocol: url.protocol,\n    };\n    return new Promise((resolve) => {\n      const req = protocol.request(options, (res) => {\n        res.setEncoding('utf8');\n        let responsePayload = '';\n        res.on('data', (chunk: string) => {\n          responsePayload += chunk;\n        });\n\n        res.on('end', () => {\n          if (res.complete && responsePayload.length > 0) {\n            try {\n              // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n              const parsedResponsePayload: Record<string, any> = JSON.parse(responsePayload);\n              const result = this.buildResponse(parsedResponsePayload);\n              resolve(result);\n              return;\n            } catch {\n              resolve(null);\n            }\n          }\n        });\n      });\n      req.on('error', () => resolve(null));\n      req.end(requestPayload);\n    });\n  }\n}\n", "import { NodeOptions, NodeConfig as INodeConfig } from '@amplitude/analytics-types';\nimport { Config } from '@amplitude/analytics-core';\nimport { Http } from './transports/http';\n\nexport class NodeConfig extends Config implements INodeConfig {\n  constructor(apiKey: string, options?: NodeOptions) {\n    super({\n      transportProvider: new Http(),\n      ...options,\n      apiKey,\n    });\n  }\n}\n\nexport const useNodeConfig = (apiKey: string, overrides?: NodeOptions): INodeConfig => {\n  return new NodeConfig(apiKey, overrides);\n};\n", "import {\n  AmplitudeCore,\n  Destination,\n  returnWrapper,\n  debugWrapper,\n  getClientLogConfig,\n  getClientStates,\n} from '@amplitude/analytics-core';\nimport { NodeClient, NodeConfig, NodeOptions } from '@amplitude/analytics-types';\nimport { Context } from './plugins/context';\nimport { useNodeConfig } from './config';\n\nexport class AmplitudeNode extends AmplitudeCore {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  config: NodeConfig;\n\n  init(apiKey = '', options?: NodeOptions) {\n    return returnWrapper(this._init({ ...options, apiKey }));\n  }\n  protected async _init(options: NodeOptions & { apiKey: string }) {\n    // Step 0: Block concurrent initialization\n    if (this.initializing) {\n      return;\n    }\n    this.initializing = true;\n\n    const nodeOptions = useNodeConfig(options.apiKey, {\n      ...options,\n    });\n\n    await super._init(nodeOptions);\n\n    await this.add(new Destination()).promise;\n    await this.add(new Context()).promise;\n\n    this.initializing = false;\n\n    await this.runQueuedFunctions('dispatchQ');\n  }\n}\n\nexport const createInstance = (): NodeClient => {\n  const client = new AmplitudeNode();\n  return {\n    init: debugWrapper(\n      client.init.bind(client),\n      'init',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n    add: debugWrapper(\n      client.add.bind(client),\n      'add',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    remove: debugWrapper(\n      client.remove.bind(client),\n      'remove',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n    ),\n    track: debugWrapper(\n      client.track.bind(client),\n      'track',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    logEvent: debugWrapper(\n      client.logEvent.bind(client),\n      'logEvent',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    identify: debugWrapper(\n      client.identify.bind(client),\n      'identify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    groupIdentify: debugWrapper(\n      client.groupIdentify.bind(client),\n      'groupIdentify',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    setGroup: debugWrapper(\n      client.setGroup.bind(client),\n      'setGroup',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    revenue: debugWrapper(\n      client.revenue.bind(client),\n      'revenue',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    flush: debugWrapper(\n      client.flush.bind(client),\n      'flush',\n      getClientLogConfig(client),\n      getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n    ),\n    setOptOut: debugWrapper(\n      client.setOptOut.bind(client),\n      'setOptOut',\n      getClientLogConfig(client),\n      getClientStates(client, ['config']),\n    ),\n  };\n};\n\nexport default createInstance();\n", "/* eslint-disable @typescript-eslint/unbound-method */\n\nimport client from './node-client';\nexport { createInstance } from './node-client';\nexport const { add, groupIdentify, identify, init, logEvent, remove, revenue, setGroup, setOptOut, track, flush } =\n  client;\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nexport * as Types from '@amplitude/analytics-types';\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\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n  var cache = [];\n\n  return function(input) {\n    for (var i = 0; i < cache.length; i++) {\n      if (cache[i].input === input) {\n        var temp = cache[0];\n        cache[0] = cache[i];\n        cache[i] = temp;\n        return cache[0].result;\n      }\n    }\n\n    var result = f(input);\n\n    cache.unshift({\n      input,\n      result,\n    });\n\n    if (cache.length > MAX_CACHED_INPUTS) {\n      cache.pop();\n    }\n\n    return result;\n  };\n}\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 */\nvar normalize = lruMemoize(function 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  // Split the path into parts between `/` characters. This is much faster than\n  // using `.split(/\\/+/g)`.\n  var parts = [];\n  var start = 0;\n  var i = 0;\n  while (true) {\n    start = i;\n    i = path.indexOf(\"/\", start);\n    if (i === -1) {\n      parts.push(path.slice(start));\n      break;\n    } else {\n      parts.push(path.slice(start, i));\n      while (i < path.length && path[i] === \"/\") {\n        i++;\n      }\n    }\n  }\n\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\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp\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.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\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 compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n  var 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.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\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._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', 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, generatorOps) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {\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      if (this._validateMapping(generated, original, source, name) === false) {\n        return;\n      }\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      var message = '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      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message);\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      var message = 'Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      });\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message)\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\nfunction SortTemplate(comparator) {\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, false) <= 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  return doQuickSort;\n}\n\nfunction cloneSort(comparator) {\n  let template = SortTemplate.toString();\n  let templateFn = new Function(`return ${template}`)();\n  return templateFn(comparator);\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 */\n\nlet sortCache = new WeakMap();\nexports.quickSort = function (ary, comparator, start = 0) {\n  let doQuickSort = sortCache.get(comparator);\n  if (doQuickSort === void 0) {\n    doQuickSort = cloneSort(comparator);\n    sortCache.set(comparator, doQuickSort);\n  }\n  doQuickSort(ary, comparator, start, 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    var boundCallback = aCallback.bind(context);\n    var names = this._names;\n    var sources = this._sources;\n    var sourceMapURL = this._sourceMapURL;\n\n    for (var i = 0, n = mappings.length; i < n; i++) {\n      var mapping = mappings[i];\n      var source = mapping.source === null ? null : sources.at(mapping.source);\n      if(source !== null) {\n        source = util.computeSourceURL(sourceRoot, source, sourceMapURL);\n      }\n      boundCallback({\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 : names.at(mapping.name)\n      });\n    }\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 */\n\nconst compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;\nfunction sortGenerated(array, start) {\n  let l = array.length;\n  let n = array.length - start;\n  if (n <= 1) {\n    return;\n  } else if (n == 2) {\n    let a = array[start];\n    let b = array[start + 1];\n    if (compareGenerated(a, b) > 0) {\n      array[start] = b;\n      array[start + 1] = a;\n    }\n  } else if (n < 20) {\n    for (let i = start; i < l; i++) {\n      for (let j = i; j > start; j--) {\n        let a = array[j - 1];\n        let b = array[j];\n        if (compareGenerated(a, b) <= 0) {\n          break;\n        }\n        array[j - 1] = b;\n        array[j] = a;\n      }\n    }\n  } else {\n    quickSort(array, compareGenerated, start);\n  }\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    let subarrayStart = 0;\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n\n        sortGenerated(generatedMappings, subarrayStart);\n        subarrayStart = generatedMappings.length;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\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 = [];\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        // 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          let currentSource = mapping.source;\n          while (originalMappings.length <= currentSource) {\n            originalMappings.push(null);\n          }\n          if (originalMappings[currentSource] === null) {\n            originalMappings[currentSource] = [];\n          }\n          originalMappings[currentSource].push(mapping);\n        }\n      }\n    }\n\n    sortGenerated(generatedMappings, subarrayStart);\n    this.__generatedMappings = generatedMappings;\n\n    for (var i = 0; i < originalMappings.length; i++) {\n      if (originalMappings[i] != null) {\n        quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);\n      }\n    }\n    this.__originalMappings = [].concat(...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 || 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        if(source !== null) {\n          source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        }\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", "export 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  index: number;\n\n  constructor(line: number, col: number, index: number) {\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: string | undefined | null;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n  position: Position,\n  columnOffset: number,\n) {\n  const { line, column, index } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nconst code = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n} satisfies ParseErrorTemplates;\n", "const NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\",\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n  typeof NodeDescriptions,\n  \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n  | {\n      type: \"UpdateExpression\";\n      prefix: boolean;\n    }\n  | {\n      type: NodeTypesWithDescriptions;\n    };\n\n// eslint-disable-next-line no-confusing-arrow\nconst toNodeDescription = (node: NodeWithDescription) =>\n  node.type === \"UpdateExpression\"\n    ? NodeDescriptions.UpdateExpression[`${node.prefix}`]\n    : NodeDescriptions[node.type];\n\nexport default toNodeDescription;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport type LValAncestor =\n  | { type: \"UpdateExpression\"; prefix: boolean }\n  | {\n      type:\n        | \"ArrayPattern\"\n        | \"AssignmentExpression\"\n        | \"CatchClause\"\n        | \"ForOfStatement\"\n        | \"FormalParameters\"\n        | \"ForInStatement\"\n        | \"ForStatement\"\n        | \"ImportSpecifier\"\n        | \"ImportNamespaceSpecifier\"\n        | \"ImportDefaultSpecifier\"\n        | \"ParenthesizedExpression\"\n        | \"ObjectPattern\"\n        | \"RestElement\"\n        | \"VariableDeclarator\";\n    };\n\nexport default {\n  AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `A ${kind}ter 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  AwaitUsingNotInAsyncContext:\n    \"'await using' is only allowed within async functions and at the top levels of modules.\",\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' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter:\n    \"A 'set' accessor 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: ({\n    kind,\n  }: {\n    kind: \"await using\" | \"const\" | \"destructuring\" | \"using\";\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses:\n    \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n  DecoratorsBeforeAfterExport:\n    \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeferImportRequiresNamespace:\n    'Only `import defer * as x from \"./module\"` is valid.',\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: ({ exportName }: { exportName: string }) =>\n    `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  DynamicImportPhaseRequiresImportExpressions: ({ phase }: { phase: string }) =>\n    `'import.${phase}(...)' can only be parsed when using the 'createImportExpressions' option.`,\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName,\n  }: {\n    localName: string;\n    exportName: string;\n  }) =>\n    `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'.\",\n\n  ForInOfLoopInitializer: ({\n    type,\n  }: {\n    type: \"ForInStatement\" | \"ForOfStatement\";\n  }) =>\n    `'${\n      type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n    }' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\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\n  IllegalBreakContinue: ({\n    type,\n  }: {\n    type: \"BreakStatement\" | \"ContinueStatement\";\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportAttributesUseAssert:\n    \"The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedAssertSyntax: true` option in the import attributes plugin to suppress this error.\",\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\n    `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArgumentTrailingComma:\n    \"Trailing comma is disallowed inside import(...) arguments.\",\n  ImportCallArity: ({ maxArgumentCount }: { maxArgumentCount: 1 | 2 }) =>\n    `\\`import()\\` requires exactly ${\n      maxArgumentCount === 1 ? \"one argument\" : \"one or two arguments\"\n    }.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault:\n    \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding:\n    'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags:\n    \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({ radix }: { radix: number }) =>\n    `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n    `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsOptionalChaining: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid optional chaining in the left-hand side of ${toNodeDescription(\n      ancestor,\n    )}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n    `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName,\n  }: {\n    identifierName: string;\n  }) => `Private name #${identifierName} 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: ({ labelName }: { labelName: string }) =>\n    `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding: \"'let' is disallowed as a lexically bound name.\",\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  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  // FIXME: Would be nice to make this \"missingPlugins\" instead.\n  // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\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: ({ key }: { key: string }) =>\n    `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode,\n  }: {\n    surrogateCharCode: number;\n  }) =>\n    `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n      16,\n    )}'.`,\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\n    `Export '${localName}' 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  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n    `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Duplicate private name #${identifierName}.`,\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 or inside a block.\",\n  SloppyFunctionAnnexB:\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  SourcePhaseImportRequiresDefault:\n    'Only `import source x from \"./module\"` is valid.',\n  StaticPrototype: \"Classes may not have static property named prototype.\",\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: ({ keyword }: { keyword: string }) =>\n    `Unexpected keyword '${keyword}'.`,\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: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected,\n  }: {\n    expected?: string | null;\n    unexpected?: string | null;\n  }) =>\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n      expected ? `, expected \"${expected}\"` : \"\"\n    }`,\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration:\n    \"Using declaration cannot appear in the top level when source type is `script`.\",\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: ({\n    target,\n    onlyValidPropertyName,\n  }: {\n    target: string;\n    onlyValidPropertyName: string;\n  }) =>\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\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  UsingDeclarationExport: \"Using declaration cannot be exported.\",\n  UsingDeclarationHasBindingPattern:\n    \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Identifier '${identifierName}' 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} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error\";\n\nexport default {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n  // is represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n    `Assigning to '${referenceName}' in strict mode.`,\n\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n  // represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n    `Binding '${bindingName}' in strict mode.`,\n\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n  StrictWith: \"'with' in strict mode.\",\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n  \"ArrowFunctionExpression\",\n  \"AssignmentExpression\",\n  \"ConditionalExpression\",\n  \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> =\n  T extends Set<infer M> ? M : unknown;\n\nexport type UnparenthesizedPipeBodyTypes = GetSetMemberType<\n  typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n  // This error is only used by the smart-mix proposal\n  PipeBodyIsTighter:\n    \"Unexpected yield after pipeline body; any yield 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: ({ token }: { token: string }) =>\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused:\n    \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n      type,\n    })}; please wrap it in parentheses.`,\n\n  // Messages whose codes start with “Pipeline” or “PrimaryTopic”\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} satisfies ParseErrorTemplates;\n", "import { Position } from \"./util/location.ts\";\n\ntype SyntaxPlugin =\n  | \"flow\"\n  | \"typescript\"\n  | \"jsx\"\n  | \"pipelineOperator\"\n  | \"placeholders\";\n\ntype ParseErrorCode =\n  | \"BABEL_PARSER_SYNTAX_ERROR\"\n  | \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n  // Look, these *could* be readonly, but then Flow complains when we initially\n  // set them. We could do a whole dance and make a special interface that's not\n  // readonly for when we create the error, then cast it to the readonly\n  // interface for public use, but the previous implementation didn't have them\n  // as readonly, so let's just not worry about it for now.\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  missingPlugin?: string | string[];\n  loc: Position;\n  details: ErrorDetails;\n\n  // We should consider removing this as it now just contains the same\n  // information as `loc.index`.\n  pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n  ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (\n  loc: Position,\n  details: ErrorDetails,\n) => ParseError<ErrorDetails>;\n\ntype ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\ntype ParseErrorCredentials<ErrorDetails> = {\n  code: string;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  toMessage: ToMessage<ErrorDetails>;\n};\n\nfunction defineHidden(obj: object, key: string, value: unknown) {\n  Object.defineProperty(obj, key, {\n    enumerable: false,\n    configurable: true,\n    value,\n  });\n}\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n  toMessage,\n  code,\n  reasonCode,\n  syntaxPlugin,\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n  const hasMissingPlugin =\n    reasonCode === \"MissingPlugin\" || reasonCode === \"MissingOneOfPlugins\";\n\n  if (!process.env.BABEL_8_BREAKING) {\n    const oldReasonCodes: Record<string, string> = {\n      AccessorCannotDeclareThisParameter: \"AccesorCannotDeclareThisParameter\",\n      AccessorCannotHaveTypeParameters: \"AccesorCannotHaveTypeParameters\",\n      ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n        \"ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference\",\n      SetAccessorCannotHaveOptionalParameter:\n        \"SetAccesorCannotHaveOptionalParameter\",\n      SetAccessorCannotHaveRestParameter: \"SetAccesorCannotHaveRestParameter\",\n      SetAccessorCannotHaveReturnType: \"SetAccesorCannotHaveReturnType\",\n    };\n    if (oldReasonCodes[reasonCode]) {\n      reasonCode = oldReasonCodes[reasonCode];\n    }\n  }\n\n  return function constructor(loc: Position, details: ErrorDetails) {\n    const error: ParseError<ErrorDetails> = new SyntaxError() as any;\n\n    error.code = code as ParseErrorCode;\n    error.reasonCode = reasonCode;\n    error.loc = loc;\n    error.pos = loc.index;\n\n    error.syntaxPlugin = syntaxPlugin;\n    if (hasMissingPlugin) {\n      error.missingPlugin = (details as any).missingPlugin;\n    }\n\n    type Overrides = {\n      loc?: Position;\n      details?: ErrorDetails;\n    };\n    defineHidden(error, \"clone\", function clone(overrides: Overrides = {}) {\n      const { line, column, index } = overrides.loc ?? loc;\n      return constructor(new Position(line, column, index), {\n        ...details,\n        ...overrides.details,\n      });\n    });\n\n    defineHidden(error, \"details\", details);\n\n    Object.defineProperty(error, \"message\", {\n      configurable: true,\n      get(this: ParseError<ErrorDetails>): string {\n        const message = `${toMessage(details)} (${loc.line}:${loc.column})`;\n        this.message = message;\n        return message;\n      },\n      set(value: string) {\n        Object.defineProperty(this, \"message\", { value, writable: true });\n      },\n    });\n\n    return error;\n  };\n}\n\ntype ParseErrorTemplate =\n  | string\n  | ToMessage<any>\n  | { message: string | ToMessage<any>; code?: ParseErrorCode };\n\nexport type ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n  T extends ParseErrorTemplates,\n>(\n  parseErrorTemplates: T,\n) => {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n  parseErrorTemplates: T,\n  syntaxPlugin?: SyntaxPlugin,\n): {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n//    the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n//    and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n//   ErrorWithStaticMessage: \"message\",\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\n//     message: ({ type }: { type: string }) => `${type}`),\n//     code: \"AN_ERROR_CODE\",\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n//   }\n// });\n//\nexport function ParseErrorEnum(\n  argument: TemplateStringsArray | ParseErrorTemplates,\n  syntaxPlugin?: SyntaxPlugin,\n) {\n  // If the first parameter is an array, that means we were called with a tagged\n  // template literal. Extract the syntaxPlugin from this, and call again in\n  // the \"normalized\" form.\n  if (Array.isArray(argument)) {\n    return (parseErrorTemplates: ParseErrorTemplates) =>\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n\n  const ParseErrorConstructors = {} as Record<\n    string,\n    ParseErrorConstructor<unknown>\n  >;\n\n  for (const reasonCode of Object.keys(argument)) {\n    const template = (argument as ParseErrorTemplates)[reasonCode];\n    const { message, ...rest } =\n      typeof template === \"string\"\n        ? { message: () => template }\n        : typeof template === \"function\"\n          ? { message: template }\n          : template;\n    const toMessage = typeof message === \"string\" ? () => message : message;\n\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n      code: \"BABEL_PARSER_SYNTAX_ERROR\",\n      reasonCode,\n      toMessage,\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\n      ...rest,\n    });\n  }\n\n  return ParseErrorConstructors;\n}\n\nimport ModuleErrors from \"./parse-error/module-errors.ts\";\nimport StandardErrors from \"./parse-error/standard-errors.ts\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors.ts\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors.ts\";\n\nexport const Errors = {\n  ...ParseErrorEnum(ModuleErrors),\n  ...ParseErrorEnum(StandardErrors),\n  ...ParseErrorEnum(StrictModeErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n", "import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase, File } from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) => {\n  if (object) {\n    defineProperty(object, key, { enumerable: false, value: object[key] });\n  }\n};\n\nfunction toESTreeLocation(node: any) {\n  toUnenumerable(node.loc.start, \"index\");\n  toUnenumerable(node.loc.end, \"index\");\n\n  return node;\n}\n\nexport default (superClass: typeof Parser) =>\n  class ESTreeParserMixin extends superClass implements Parser {\n    parse(): File {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.options.tokens) {\n        file.tokens = file.tokens.map(toESTreeLocation);\n      }\n\n      return file;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n      let regex: RegExp | null = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (_) {\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    // @ts-expect-error ESTree plugin changes node types\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt: bigint | null;\n      try {\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    // @ts-expect-error ESTree plugin changes node types\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 = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T extends N.EstreeLiteral>(value: any) {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\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    // @ts-expect-error ESTree plugin changes node types\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.estreeParseLiteral(value);\n    }\n\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const expression = directive.value as any as N.EstreeLiteral;\n      delete directive.value;\n\n      expression.type = \"Literal\";\n      // @ts-expect-error N.EstreeLiteral.raw is not defined.\n      expression.raw = expression.extra.raw;\n      expression.value = expression.extra.expressionValue;\n\n      const stmt = directive as any as N.ExpressionStatement;\n      stmt.type = \"ExpressionStatement\";\n      stmt.expression = expression;\n      // @ts-expect-error N.ExpressionStatement.directive is not defined\n      stmt.directive = expression.extra.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): 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        // @ts-expect-error plugin typings\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return (method as unknown as N.EstreeMethodDefinition).value.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    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: boolean | undefined | null,\n      topLevel: boolean,\n      end: TokenType,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): void {\n      super.parseBlockBody(\n        node,\n        allowDirectives,\n        topLevel,\n        end,\n        afterBlockParse,\n      );\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      // @ts-expect-error estree plugin typings\n      node.body = directiveStatements.concat(node.body);\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        // @ts-expect-error mutate AST types\n        method.value.typeParameters = method.typeParameters;\n        delete method.typeParameters;\n      }\n      classBody.body.push(method);\n    }\n\n    parsePrivateName(): any {\n      const node = super.parsePrivateName();\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return node;\n        }\n      }\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      node = node as any;\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      // @ts-expect-error mutate AST types\n      node.type = \"PrivateIdentifier\";\n      return node as unknown as N.EstreePrivateIdentifier;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isPrivateName(node: N.Node): node is N.EstreePrivateIdentifier {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.isPrivateName(node);\n        }\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    getPrivateNameSV(node: N.EstreePrivateIdentifier): string {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.getPrivateNameSV(node as unknown as N.PrivateName);\n        }\n      }\n      return node.name;\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n      const node = super.parseLiteral<T>(value, type);\n      // @ts-expect-error mutating AST types\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 | null,\n      isMethod: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseMethod<\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope: boolean = false,\n    ): N.EstreeMethodDefinition {\n      let funcNode = this.startNode<N.MethodLike>();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        // @ts-expect-error todo(flow->ts)\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error mutate AST types\n      funcNode.type = \"FunctionExpression\";\n      delete funcNode.kind;\n      // @ts-expect-error mutate AST types\n      node.value = funcNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      return this.finishNode(\n        // @ts-expect-error cast methods to estree types\n        node as Undone<N.EstreeMethodDefinition>,\n        \"MethodDefinition\",\n      );\n    }\n\n    nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n      if (key.type === \"Literal\") return key.value === \"constructor\";\n      return super.nameIsConstructor(key);\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = super.parseClassProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      return propertyNode as N.EstreePropertyDefinition;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      propertyNode.computed = false;\n      return propertyNode as 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 | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ) as any;\n\n      if (node) {\n        node.type = \"Property\";\n        if ((node as any as N.ClassMethod).kind === \"method\") {\n          node.kind = \"init\";\n        }\n        node.shorthand = false;\n      }\n\n      return node as any;\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startLoc: Position | undefined | null,\n      isPattern: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectProperty | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectProperty(\n        prop,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ) as any;\n\n      if (node) {\n        node.kind = \"init\";\n        node.type = \"Property\";\n      }\n\n      return node as any;\n    }\n\n    isValidLVal(\n      type: string,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\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): void {\n      if (node != null && this.isObjectProperty(node)) {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableObjectExpressionProp(\n      prop: N.Node,\n      isLast: boolean,\n      isLHS: boolean,\n    ) {\n      if (\n        prop.type === \"Property\" &&\n        (prop.kind === \"get\" || prop.kind === \"set\")\n      ) {\n        this.raise(Errors.PatternHasAccessor, prop.key);\n      } else if (prop.type === \"Property\" && prop.method) {\n        this.raise(Errors.PatternHasMethod, prop.key);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n      }\n    }\n\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n      unfinished: Undone<T>,\n      optional: boolean,\n    ): T {\n      const node = super.finishCallExpression(unfinished, optional);\n\n      if (node.callee.type === \"Import\") {\n        (node as N.Node as N.EstreeImportExpression).type = \"ImportExpression\";\n        (node as N.Node as N.EstreeImportExpression).source = node\n          .arguments[0] as N.Expression;\n        if (\n          this.hasPlugin(\"importAttributes\") ||\n          (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\"))\n        ) {\n          (node as N.Node as N.EstreeImportExpression).options =\n            (node.arguments[1] as N.Expression) ?? null;\n          // compatibility with previous ESTree AST\n          (node as N.Node as N.EstreeImportExpression).attributes =\n            (node.arguments[1] as N.Expression) ?? null;\n        }\n        // arguments isn't optional in the type definition\n        delete node.arguments;\n        // 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(\n      unfinished: Undone<N.AnyExport>,\n      decorators: N.Decorator[] | null,\n    ) {\n      const exportStartLoc = this.state.lastTokStartLoc;\n      const node = super.parseExport(unfinished, decorators);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          // @ts-expect-error mutating AST types\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            // @ts-expect-error mutating AST types\n            node.type = \"ExportAllDeclaration\";\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              declaration.decorators?.length > 0 &&\n              // decorator comes before export\n              declaration.start === node.start\n            ) {\n              this.resetStartLocation(\n                node,\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n                // export declaration must start with export.\n                // https://github.com/babel/babel/issues/15085\n                // Here we reset export declaration's start to be the start of the export token\n                exportStartLoc,\n              );\n            }\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      const node = super.parseSubscript(base, startLoc, noCalls, state);\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          // strip Optional prefix\n          (node as unknown as N.CallExpression | N.MemberExpression).type =\n            node.type.substring(8) as \"CallExpression\" | \"MemberExpression\";\n        }\n        if (state.stop) {\n          const chain = this.startNodeAtNode<N.EstreeChainExpression>(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        // @ts-expect-error not in the type definitions\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    isOptionalMemberExpression(node: N.Node) {\n      if (node.type === \"ChainExpression\") {\n        return node.expression.type === \"MemberExpression\";\n      }\n      return super.isOptionalMemberExpression(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    // @ts-expect-error ESTree plugin changes node types\n    isObjectProperty(node: N.Node): node is N.EstreeProperty {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectMethod(node: N.Node): node is N.EstreeProperty {\n      return (\n        node.type === \"Property\" &&\n        (node.method || node.kind === \"get\" || node.kind === \"set\")\n      );\n    }\n\n    finishNodeAt<T extends NodeType>(\n      node: Undone<T>,\n      type: T[\"type\"],\n      endLoc: Position,\n    ): T {\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n    }\n\n    resetStartLocation(node: N.Node, startLoc: Position) {\n      super.resetStartLocation(node, startLoc);\n      toESTreeLocation(node);\n    }\n\n    resetEndLocation(\n      node: NodeBase,\n      endLoc: Position = this.state.lastTokEndLoc,\n    ): void {\n      super.resetEndLocation(node, endLoc);\n      toESTreeLocation(node);\n    }\n  };\n", "// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\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\nconst types: {\n  [key: string]: TokContext;\n} = {\n  brace: new TokContext(\"{\"), // normal JavaScript expression\n  j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n  j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n  j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n  types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n", "import { types as tc, type TokContext } from \"./context.ts\";\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 “argument” 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 | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n  label: string;\n  keyword: string | undefined | null;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: number | undefined | null;\n  // todo(Babel 8): remove updateContext from exposed token layout\n  declare updateContext:\n    | ((context: Array<TokContext>) => void)\n    | undefined\n    | null;\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    if (!process.env.BABEL_8_BREAKING) {\n      this.updateContext = null;\n    }\n  }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n  name: string,\n  options: TokenOptions = {},\n): TokenType {\n  ++tokenTypeCounter;\n  keywords.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n  return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n  // Punctuation token types.\n  bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", { beforeExpr }),\n  semi: createToken(\";\", { beforeExpr }),\n  colon: createToken(\":\", { beforeExpr }),\n  doubleColon: createToken(\"::\", { beforeExpr }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", { beforeExpr }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", { beforeExpr }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", { beforeExpr }),\n  backQuote: createToken(\"`\", { startsExpr }),\n  dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n  // start: isTemplate\n  templateTail: createToken(\"...`\", { startsExpr }),\n  templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n  // end: isTemplate\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: createToken(\"#!...\"),\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  // start: isAssign\n  eq: createToken(\"=\", { beforeExpr, isAssign }),\n  assign: createToken(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\n  // When the proposal settles on a token, the others can be merged with\n  // tt.assign.\n  xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // end: isAssign\n\n  incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n  // More possible topic tokens.\n  // When the proposal settles on a token, at least one of these may be removed.\n  doubleCaret: createToken(\"^^\", { startsExpr }),\n  doubleAt: createToken(\"@@\", { startsExpr }),\n\n  // start: isBinop\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  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: createToken(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: createToken(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\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  // start: isLiteralPropertyName\n  // start: isKeyword\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  // end: isBinop\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  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\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  _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  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n  // start: isLoop\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _for: createKeyword(\"for\", { isLoop }),\n  _while: createKeyword(\"while\", { isLoop }),\n  // end: isLoop\n  // end: isKeyword\n\n  // Primary literals\n  // start: isIdentifier\n  _as: createKeywordLike(\"as\", { startsExpr }),\n  _assert: createKeywordLike(\"assert\", { startsExpr }),\n  _async: createKeywordLike(\"async\", { startsExpr }),\n  _await: createKeywordLike(\"await\", { startsExpr }),\n  _defer: createKeywordLike(\"defer\", { startsExpr }),\n  _from: createKeywordLike(\"from\", { startsExpr }),\n  _get: createKeywordLike(\"get\", { startsExpr }),\n  _let: createKeywordLike(\"let\", { startsExpr }),\n  _meta: createKeywordLike(\"meta\", { startsExpr }),\n  _of: createKeywordLike(\"of\", { startsExpr }),\n  _sent: createKeywordLike(\"sent\", { startsExpr }),\n  _set: createKeywordLike(\"set\", { startsExpr }),\n  _source: createKeywordLike(\"source\", { startsExpr }),\n  _static: createKeywordLike(\"static\", { startsExpr }),\n  _using: createKeywordLike(\"using\", { startsExpr }),\n  _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n  // Flow and TypeScript Keywordlike\n  _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n  _checks: createKeywordLike(\"checks\", { startsExpr }),\n  _exports: createKeywordLike(\"exports\", { startsExpr }),\n  _global: createKeywordLike(\"global\", { startsExpr }),\n  _implements: createKeywordLike(\"implements\", { startsExpr }),\n  _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n  _infer: createKeywordLike(\"infer\", { startsExpr }),\n  _is: createKeywordLike(\"is\", { startsExpr }),\n  _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n  _proto: createKeywordLike(\"proto\", { startsExpr }),\n  _require: createKeywordLike(\"require\", { startsExpr }),\n  _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n  // start: isTSTypeOperator\n  _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n  _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n  _unique: createKeywordLike(\"unique\", { startsExpr }),\n  // end: isTSTypeOperator\n  // start: isTSDeclarationStart\n  _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n  _declare: createKeywordLike(\"declare\", { startsExpr }),\n  _enum: createKeywordLike(\"enum\", { startsExpr }),\n  _module: createKeywordLike(\"module\", { startsExpr }),\n  _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n  // start: isFlowInterfaceOrTypeOrOpaque\n  _interface: createKeywordLike(\"interface\", { startsExpr }),\n  _type: createKeywordLike(\"type\", { startsExpr }),\n  // end: isTSDeclarationStart\n  _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n  // end: isFlowInterfaceOrTypeOrOpaque\n  name: createToken(\"name\", { startsExpr }),\n  // end: isIdentifier\n\n  string: createToken(\"string\", { startsExpr }),\n  num: createToken(\"num\", { startsExpr }),\n  bigint: createToken(\"bigint\", { startsExpr }),\n  // TODO: Remove this in Babel 8\n  decimal: createToken(\"decimal\", { startsExpr }),\n  // end: isLiteralPropertyName\n  regexp: createToken(\"regexp\", { startsExpr }),\n  privateName: createToken(\"#name\", { startsExpr }),\n  eof: createToken(\"eof\"),\n\n  // jsx plugin\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", { beforeExpr: true }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr: true }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { startsExpr: true }),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.name;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n  // we can remove the token >= tt._in check when we\n  // know a token is either keyword or identifier\n  return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.name;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n  return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n  return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n  return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n  return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n  return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n  return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n  return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n  return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n  return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n  return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n  return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n  return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n  return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n  return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n  return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n  return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n  return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n  return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n  tokenTypes[tt.braceR].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes[tt.braceL].updateContext =\n    tokenTypes[tt.braceHashL].updateContext =\n    tokenTypes[tt.dollarBraceL].updateContext =\n      context => {\n        context.push(tc.brace);\n      };\n\n  tokenTypes[tt.backQuote].updateContext = context => {\n    if (context[context.length - 1] === tc.template) {\n      context.pop();\n    } else {\n      context.push(tc.template);\n    }\n  };\n\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\n    context.push(tc.j_expr, tc.j_oTag);\n  };\n}\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\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.cjs`.\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\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\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\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\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.cjs`.\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,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,4,51,13,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,39,27,10,22,251,41,7,1,17,2,60,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,31,9,2,0,3,0,2,37,2,0,26,0,2,0,45,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,200,32,32,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,26,3994,6,582,6842,29,1763,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,433,44,212,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,42,9,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,229,29,3,0,496,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\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,7,9,32,4,318,1,80,3,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,68,8,2,0,3,0,2,3,2,4,2,0,15,1,83,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,7,19,58,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,343,9,54,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,10,5350,0,7,14,11465,27,2343,9,87,9,39,4,60,6,26,9,535,9,470,0,2,54,8,3,82,0,12,1,19628,1,4178,9,519,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,245,1,2,9,726,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", "import * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\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(\n  current: number,\n  next: number,\n  next2: number,\n): boolean {\n  return (\n    current === charCodes.atSign &&\n    next === charCodes.atSign &&\n    isIdentifierStart(next2)\n  );\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", "import { ScopeFlag, BindingFlag } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport type * as N from \"../types.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport const enum NameType {\n  // var-declared names in the current lexical scope\n  Var = 1 << 0,\n  // lexically-declared names in the current lexical scope\n  Lexical = 1 << 1,\n  // lexically-declared FunctionDeclaration names in the current lexical scope\n  Function = 1 << 2,\n}\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  flags: ScopeFlag = 0;\n  names: Map<string, NameType> = new Map();\n  firstLexicalName = \"\";\n\n  constructor(flags: ScopeFlag) {\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 extends Scope = Scope> {\n  parser: Tokenizer;\n  scopeStack: Array<IScope> = [];\n  inModule: boolean;\n  undefinedExports: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer, inModule: boolean) {\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n\n  get inTopLevel() {\n    return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & ScopeFlag.CLASS) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & ScopeFlag.CLASS) > 0 && (flags & ScopeFlag.FUNCTION) === 0;\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlag): Scope {\n    return new Scope(flags);\n  }\n\n  enter(flags: ScopeFlag) {\n    /*:: +createScope: (flags:ScopeFlag) => IScope; */\n    // @ts-expect-error This method will be overwritten by subclasses\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit(): ScopeFlag {\n    const scope = this.scopeStack.pop();\n    return scope.flags;\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 & (ScopeFlag.FUNCTION | ScopeFlag.STATIC_BLOCK) ||\n      (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    let scope = this.currentScope();\n    if (\n      bindingType & BindingFlag.SCOPE_LEXICAL ||\n      bindingType & BindingFlag.SCOPE_FUNCTION\n    ) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n      let type = scope.names.get(name) || 0;\n\n      if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n        type = type | NameType.Function;\n      } else {\n        if (!scope.firstLexicalName) {\n          scope.firstLexicalName = name;\n        }\n        type = type | NameType.Lexical;\n      }\n\n      scope.names.set(name, type);\n\n      if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BindingFlag.SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.names.set(name, (scope.names.get(name) || 0) | NameType.Var);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & ScopeFlag.VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n    loc: Position,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n    if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n      return scope.names.has(name);\n    }\n\n    const type = scope.names.get(name);\n\n    if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n      return (\n        (type & NameType.Lexical) > 0 ||\n        (!this.treatFunctionsAsVarInScope(scope) && (type & NameType.Var) > 0)\n      );\n    }\n\n    return (\n      ((type & NameType.Lexical) > 0 &&\n        // Annex B.3.4\n        // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n        !(\n          scope.flags & ScopeFlag.SIMPLE_CATCH &&\n          scope.firstLexicalName === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) &&\n        (type & NameType.Function) > 0)\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (!topLevelScope.names.has(name)) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  currentThisScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (\n        flags & (ScopeFlag.VAR | ScopeFlag.CLASS) &&\n        !(flags & ScopeFlag.ARROW)\n      ) {\n        return flags;\n      }\n    }\n  }\n}\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, type ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\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: ScopeFlag): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    const scope = this.currentScope();\n    if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n    if (\n      bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN &&\n      !scope.declareFunctions.has(name)\n    ) {\n      const type = scope.names.get(name);\n      return (type & NameType.Function) > 0 || (type & NameType.Lexical) > 0;\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", "import type { Options } from \"../options.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type { PluginsMap } from \"./index.ts\";\nimport type ScopeHandler from \"../util/scope.ts\";\nimport type ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport type ClassScopeHandler from \"../util/class-scope.ts\";\nimport type ProductionParameterHandler from \"../util/production-parameter.ts\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"../typings.ts\";\nimport type * as N from \"../types.ts\";\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<any>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: string | undefined | null;\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  // Comment store for Program.comments\n  declare comments: Array<N.Comment>;\n\n  // This method accepts either a string (plugin name) or an array pair\n  // (plugin name and options object). If an options object is given,\n  // then each value is non-recursively checked for identity with that\n  // plugin’s actual option value.\n  hasPlugin(pluginConfig: PluginConfig): boolean {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(\n        pluginOptions,\n      ) as (keyof typeof pluginOptions)[]) {\n        if (actualOptions?.[key] !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  getPluginOption<\n    PluginName extends ParserPluginWithOptions[0],\n    OptionName extends keyof PluginOptions<PluginName>,\n  >(plugin: PluginName, name: OptionName) {\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n      name\n    ];\n  }\n}\n", "/*:: declare var invariant; */\n\nimport BaseParser from \"./base.ts\";\nimport type { Comment, Node, Identifier } from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node.ts\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n  /**\n   * the start of the whitespace token.\n   */\n  start: number;\n  /**\n   * the end of the whitespace token.\n   */\n  end: number;\n  /**\n   * the containing comments\n   */\n  comments: Array<Comment>;\n  /**\n   * the immediately preceding AST node of the whitespace token\n   */\n  leadingNode: Node | null;\n  /**\n   * the immediately following AST node of the whitespace token\n   */\n  trailingNode: Node | null;\n  /**\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\n   */\n  containingNode: Node | null;\n};\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 */\nfunction setTrailingComments(node: Undone<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 leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.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 */\nexport function setInnerComments(\n  node: Undone<Node>,\n  comments?: Array<Comment>,\n) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\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 */\nfunction adjustInnerComments(\n  node: Undone<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\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    const { commentsLen } = this.state;\n    if (this.comments.length !== commentsLen) {\n      this.comments.length = commentsLen;\n    }\n    this.comments.push(comment);\n    this.state.commentsLen++;\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  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  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        setLeadingComments(commentWS.trailingNode, 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 remaining 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  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  /* eslint-disable no-irregular-whitespace */\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 reinterpret 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   * ```\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 node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\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  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node leading comments, assuming that `node` is a\n   * single-token node. Used in import phase modifiers parsing. We parse\n   * `module` in `import module foo from ...` as an identifier but may\n   * reinterpret it into a phase modifier later. In this case the identifier is\n   * not part of the AST and we should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * import /* 1 *​/ module a from \"a\";\n   * ```\n   * the comment whitespace `/* 1 *​/` has trailing node Identifier(module). When\n   * we see that `module` is not a default import binding, we mark `/* 1 *​/` as\n   * inner comments of the ImportDeclaration. So `/* 1 *​/` should be detached from\n   * the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousIdentifierLeadingComments(node: Identifier) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n\n    if (commentStack[length - 1].trailingNode === node) {\n      commentStack[length - 1].trailingNode = null;\n    } else if (length >= 2 && commentStack[length - 2].trailingNode === node) {\n      commentStack[length - 2].trailingNode = null;\n    }\n  }\n\n  /**\n   * Attach a node to the comment whitespaces right before/after\n   * the given range.\n   *\n   * This is used to properly attach comments around parenthesized\n   * expressions as leading/trailing comments of the inner expression.\n   */\n  takeSurroundingComments(node: Node, start: number, end: number) {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\n", "import * 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|[\\r\\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 function hasNewLine(input: string, start: number, end: number): boolean {\n  for (let i = start; i < end; i++) {\n    if (isNewLine(input.charCodeAt(i))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n  /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/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", "import type { Options } from \"../options.ts\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location.ts\";\n\nimport { types as ct, type TokContext } from \"./context.ts\";\nimport { tt, type TokenType } from \"./types.ts\";\nimport type { Errors } from \"../parse-error.ts\";\nimport type { ParseError } from \"../parse-error.ts\";\n\nexport type DeferredStrictError =\n  | typeof Errors.StrictNumericEscape\n  | typeof Errors.StrictOctalLiteral;\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  // 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 const enum LoopLabelKind {\n  Loop = 1,\n  Switch = 2,\n}\n\ndeclare const bit: import(\"../../../../scripts/babel-plugin-bit-decorator/types.d.ts\").BitDecorator<State>;\n\nexport default class State {\n  @bit.storage flags: number;\n\n  @bit accessor strict = false;\n\n  curLine: number;\n  lineStart: 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({ strictMode, sourceType, startLine, startColumn }: Options): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n          ? true\n          : sourceType === \"module\";\n\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\n  }\n\n  errors: ParseError<any>[] = [];\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  @bit accessor maybeInArrowParameters = false;\n  @bit accessor inType = false;\n  @bit accessor noAnonFunctionType = false;\n  @bit accessor hasFlowComment = false;\n  @bit accessor isAmbientContext = false;\n  @bit accessor inAbstractClass = false;\n  @bit accessor inDisallowConditionalTypesContext = 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  @bit accessor soloAwait = false;\n  @bit accessor inFSharpPipelineDirectBody = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: LoopLabelKind;\n    name?: string | null;\n    statementStart?: number;\n  }> = [];\n\n  commentsLen = 0;\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: 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  // this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\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\n  // Used to track whether a JSX element is allowed to form\n  @bit accessor canStartJSXElement = 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  @bit accessor containsEsc = false;\n\n  // Used to track invalid escape sequences in template literals,\n  // that must be reported if the template is not tagged.\n  firstInvalidTemplateEscapePos: null | Position = null;\n\n  @bit accessor hasTopLevelAwait = 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, [DeferredStrictError, Position]> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  /**\n   * When we add a new property, we must manually update the `clone` method\n   * @see State#clone\n   */\n\n  curPosition(): Position {\n    return new Position(this.curLine, this.pos - this.lineStart, this.pos);\n  }\n\n  clone(): State {\n    const state = new State();\n    state.flags = this.flags;\n    state.curLine = this.curLine;\n    state.lineStart = this.lineStart;\n    state.startLoc = this.startLoc;\n    state.endLoc = this.endLoc;\n    state.errors = this.errors.slice();\n    state.potentialArrowAt = this.potentialArrowAt;\n    state.noArrowAt = this.noArrowAt.slice();\n    state.noArrowParamsConversionAt = this.noArrowParamsConversionAt.slice();\n    state.topicContext = this.topicContext;\n    state.labels = this.labels.slice();\n    state.commentsLen = this.commentsLen;\n    state.commentStack = this.commentStack.slice();\n    state.pos = this.pos;\n    state.type = this.type;\n    state.value = this.value;\n    state.start = this.start;\n    state.end = this.end;\n    state.lastTokEndLoc = this.lastTokEndLoc;\n    state.lastTokStartLoc = this.lastTokStartLoc;\n    state.context = this.context.slice();\n    state.firstInvalidTemplateEscapePos = this.firstInvalidTemplateEscapePos;\n    state.strictErrors = this.strictErrors;\n    state.tokensLength = this.tokensLength;\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  context: TokContext[];\n  startLoc: Position;\n  lastTokEndLoc: Position;\n  curLine: number;\n  lineStart: number;\n  curPosition: () => Position;\n  /* Used only in readToken_mult_modulo */\n  inType: boolean;\n  // These boolean properties are not initialized in createLookaheadState()\n  // instead they will only be set by the tokenizer\n  containsEsc?: boolean;\n};\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set<number>([\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: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n  // 0 - 1\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n  // 0 - 7\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n  // 0 - 9\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n  // 0 - 9, A - F, a - f,\n  hex: (ch: number) =>\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n  unterminated(\n    initialPos: number,\n    initialLineStart: number,\n    initialCurLine: number,\n  ): void;\n};\n\nexport function readStringContents(\n  type: \"single\" | \"double\" | \"template\",\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  errors: StringContentsErrorHandlers,\n) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const { length } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === charCodes.backslash) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        type === \"template\",\n        errors,\n      );\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = { pos, lineStart, curLine };\n      } else {\n        out += res.ch;\n      }\n      ({ pos, lineStart, curLine } = res);\n      chunkStart = pos;\n    } else if (\n      ch === charCodes.lineSeparator ||\n      ch === charCodes.paragraphSeparator\n    ) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (\n          ch === charCodes.carriageReturn &&\n          input.charCodeAt(pos) === charCodes.lineFeed\n        ) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return process.env.BABEL_8_BREAKING\n    ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n    : {\n        pos,\n        str: out,\n        firstInvalidLoc,\n        lineStart,\n        curLine,\n        containsInvalid: !!firstInvalidLoc,\n      };\n}\n\nfunction isStringEnd(\n  type: \"single\" | \"double\" | \"template\",\n  ch: number,\n  input: string,\n  pos: number,\n) {\n  if (type === \"template\") {\n    return (\n      ch === charCodes.graveAccent ||\n      (ch === charCodes.dollarSign &&\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n    );\n  }\n  return (\n    ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n  );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n  CodePointErrorHandlers & {\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n  };\n\nfunction readEscapedChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  inTemplate: boolean,\n  errors: EscapedCharErrorHandlers,\n) {\n  const throwOnInvalid = !inTemplate;\n  pos++; // skip '\\'\n\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case charCodes.lowercaseN:\n      return res(\"\\n\");\n    case charCodes.lowercaseR:\n      return res(\"\\r\");\n    case charCodes.lowercaseX: {\n      let code;\n      ({ code, pos } = readHexChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        2,\n        false,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCharCode(code));\n    }\n    case charCodes.lowercaseU: {\n      let code;\n      ({ code, pos } = readCodePoint(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCodePoint(code));\n    }\n    case charCodes.lowercaseT:\n      return res(\"\\t\");\n    case charCodes.lowercaseB:\n      return res(\"\\b\");\n    case charCodes.lowercaseV:\n      return res(\"\\u000b\");\n    case charCodes.lowercaseF:\n      return res(\"\\f\");\n    case charCodes.carriageReturn:\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\n        ++pos;\n      }\n    // fall through\n    case charCodes.lineFeed:\n      lineStart = pos;\n      ++curLine;\n    // fall through\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return res(\"\");\n    case charCodes.digit8:\n    case charCodes.digit9:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    // fall through\n    default:\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n        const startPos = pos - 1;\n        const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));\n\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        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (\n          octalStr !== \"0\" ||\n          next === charCodes.digit8 ||\n          next === charCodes.digit9\n        ) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  len: number,\n  forceLen: boolean,\n  throwOnInvalid: boolean,\n  errors: HexCharErrorHandlers,\n) {\n  const initialPos = pos;\n  let n;\n  ({ n, pos } = readInt(\n    input,\n    pos,\n    lineStart,\n    curLine,\n    16,\n    len,\n    forceLen,\n    false,\n    errors,\n    /* bailOnError */ !throwOnInvalid,\n  ));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n  numericSeparatorInEscapeSequence(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  unexpectedNumericSeparator(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  // It can return \"true\" to indicate that the error was handled\n  // and the int parsing should continue.\n  invalidDigit(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n    radix: number,\n  ): boolean;\n};\n\nexport function readInt(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  radix: number,\n  len: number | undefined,\n  forceLen: boolean,\n  allowNumSeparator: boolean | \"bail\",\n  errors: IntErrorHandlers,\n  bailOnError: boolean,\n) {\n  const start = pos;\n  const forbiddenSiblings =\n    radix === 16\n      ? forbiddenNumericSeparatorSiblings.hex\n      : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling =\n    radix === 16\n      ? isAllowedNumericSeparatorSibling.hex\n      : radix === 10\n        ? isAllowedNumericSeparatorSibling.dec\n        : radix === 8\n          ? isAllowedNumericSeparatorSibling.oct\n          : isAllowedNumericSeparatorSibling.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 = input.charCodeAt(pos);\n    let val;\n\n    if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return { n: null, pos };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (\n        Number.isNaN(next) ||\n        !isAllowedSibling(next) ||\n        forbiddenSiblings.has(prev) ||\n        forbiddenSiblings.has(next)\n      ) {\n        if (bailOnError) return { n: null, pos };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      // Ignore this _ character\n      ++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 found a digit which is too big, errors.invalidDigit can return true to avoid\n      // breaking the loop (this is used for error recovery).\n      if (val <= 9 && bailOnError) {\n        return { n: null, pos };\n      } else if (\n        val <= 9 &&\n        errors.invalidDigit(pos, lineStart, curLine, radix)\n      ) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\n    return { n: null, pos };\n  }\n\n  return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  throwOnInvalid: boolean,\n  errors: CodePointErrorHandlers,\n) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === charCodes.leftCurlyBrace) {\n    ++pos;\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      input.indexOf(\"}\", pos) - pos,\n      true,\n      throwOnInvalid,\n      errors,\n    ));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return { code: null, pos };\n      }\n    }\n  } else {\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      4,\n      false,\n      throwOnInvalid,\n      errors,\n    ));\n  }\n  return { code, pos };\n}\n", "/*:: declare var invariant; */\n\nimport type { Options } from \"../options.ts\";\nimport {\n  Position,\n  SourceLocation,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments.ts\";\nimport type * as N from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier.ts\";\nimport {\n  tokenIsKeyword,\n  tokenLabelName,\n  tt,\n  keywords as keywordTypes,\n  type TokenType,\n} from \"./types.ts\";\nimport type { TokContext } from \"./context.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n  skipWhiteSpaceInLine,\n} from \"../util/whitespace.ts\";\nimport State from \"./state.ts\";\nimport type { LookaheadState, DeferredStrictError } from \"./state.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { Node } from \"../types.ts\";\n\nimport {\n  readInt,\n  readCodePoint,\n  readStringContents,\n  type IntErrorHandlers,\n  type CodePointErrorHandlers,\n  type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings.ts\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n  return new Position(curLine, pos - lineStart, pos);\n}\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  charCodes.lowercaseV,\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 abstract class Tokenizer extends CommentsParser {\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.comments = [];\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.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\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  /**\n   * Whether current token matches given type\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  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      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition,\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  lookahead(): LookaheadState {\n    const old = this.state;\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\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    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  /**\n   * Similar to nextToken, but it will stop at line break when it is seen before the next token\n   *\n   * @returns {number} position of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  nextTokenInLineStart(): number {\n    return this.nextTokenInLineStartSince(this.state.pos);\n  }\n\n  nextTokenInLineStartSince(pos: number): number {\n    skipWhiteSpaceInLine.lastIndex = pos;\n    return skipWhiteSpaceInLine.test(this.input)\n      ? skipWhiteSpaceInLine.lastIndex\n      : pos;\n  }\n\n  /**\n   * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n   * seen before the next token\n   *\n   * @returns {number} char code of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  lookaheadInLineCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenInLineStart());\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(([toParseError, at]) =>\n        this.raise(toParseError, at),\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 properties.\n  nextToken(): void {\n    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    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n\n  // Skips a block comment, whose end is marked by commentEnd.\n  // *-/ is used by the Flow plugin, when parsing block comments nested\n  // inside Flow comments.\n  skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      // We have to call this again here because startLoc may not be set...\n      // This seems to be for performance reasons:\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n      throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n    }\n\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\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 comment: N.CommentBlock = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start,\n      end: end + commentEnd.length,\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 | undefined {\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\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment: N.CommentLine = {\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 (\n            ch === charCodes.dash &&\n            !this.inModule &&\n            this.options.annexB\n          ) {\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 (\n            ch === charCodes.lessThan &&\n            !this.inModule &&\n            this.options.annexB\n          ) {\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: 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 `canStartJSXElement`, 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) {\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type: TokenType): void {\n    this.state.type = type;\n    // @ts-expect-error the prevType of updateContext is required\n    // only when the new type is tt.slash/tt.jsxTagEnd\n    this.updateContext();\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(\n        Errors.UnexpectedDigitAfterHash,\n        this.state.curPosition(),\n      );\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 (\n        !process.env.BABEL_8_BREAKING &&\n        this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\"\n      ) {\n        throw this.raise(\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n          this.state.curPosition(),\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    // '%' or '*'\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    // '%=' or '*='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\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        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\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    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '^='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      this.finishOp(tt.xorAssign, 2);\n    }\n    // '^^'\n    else if (\n      next === charCodes.caret &&\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\n      // because it could be a ^ hack token followed by a ^ binary operator.\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"^^\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleCaret, 2);\n\n      // `^^^` is forbidden and must be separated by a space.\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === charCodes.caret) {\n        this.unexpected();\n      }\n    }\n    // '^'\n    else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_atSign(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '@@'\n    if (\n      next === charCodes.atSign &&\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"@@\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleAt, 2);\n    }\n    // '@'\n    else {\n      this.finishOp(tt.at, 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(): void {\n    // '<'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.lessThan) {\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n        return;\n      }\n      this.finishOp(tt.bitShiftL, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.lt, 1);\n  }\n\n  readToken_gt(): void {\n    // '>'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.greaterThan) {\n      const size =\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShiftR, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.gt, 1);\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      // 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          !process.env.BABEL_8_BREAKING &&\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              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\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          !process.env.BABEL_8_BREAKING &&\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              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\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.readTemplateToken();\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        this.readToken_lt();\n        return;\n\n      case charCodes.greaterThan:\n        this.readToken_gt();\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.readToken_atSign();\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      Errors.InvalidOrUnexpectedToken,\n      this.state.curPosition(),\n      {\n        unexpected: String.fromCodePoint(code),\n      },\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 startLoc = this.state.startLoc;\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        // FIXME: explain\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\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    const nextPos = () =>\n      // (pos + 1) + 1 - start\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\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      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === charCodes.lowercaseV) {\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        } else if (cp === charCodes.lowercaseU) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, nextPos());\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(Errors.MalformedRegExpFlags, nextPos());\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 = false,\n    allowNumSeparator: boolean | \"bail\" = true,\n  ): number | null {\n    const { n, pos } = readInt(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      radix,\n      len,\n      forceLen,\n      allowNumSeparator,\n      this.errorHandlers_readInt,\n      /* bailOnError */ false,\n    );\n    this.state.pos = pos;\n    return n;\n  }\n\n  readRadixNumber(radix: number): void {\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(\n        Errors.InvalidDigit,\n        // Numeric literals can't have newlines, so this is safe to do.\n        createPositionWithColumnOffset(startLoc, 2),\n        {\n          radix,\n        },\n      );\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(Errors.InvalidDecimal, startLoc);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    if (isBigInt) {\n      const str = this.input\n        .slice(startLoc.index, this.state.pos)\n        .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    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, this.state.curPosition());\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(Errors.StrictOctalLiteral, startLoc);\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          // Numeric literals can't have newlines, so this is safe to do.\n          this.raise(\n            Errors.ZeroDigitNumericSeparator,\n            createPositionWithColumnOffset(startLoc, underscorePos),\n          );\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(Errors.InvalidOrMissingExponent, startLoc);\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(Errors.InvalidBigIntLiteral, startLoc);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, startLoc);\n      }\n      ++this.state.pos;\n      // eslint-disable-next-line no-var\n      var isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\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 (!process.env.BABEL_8_BREAKING && 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 { code, pos } = readCodePoint(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      throwOnInvalid,\n      this.errorHandlers_readCodePoint,\n    );\n    this.state.pos = pos;\n    return code;\n  }\n\n  readString(quote: number): void {\n    const { str, pos, curLine, lineStart } = readStringContents(\n      quote === charCodes.quotationMark ? \"double\" : \"single\",\n      this.input,\n      this.state.pos + 1, // skip the quote\n      this.state.lineStart,\n      this.state.curLine,\n      this.errorHandlers_readStringContents_string,\n    );\n    this.state.pos = pos + 1; // skip the quote\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(tt.string, str);\n  }\n\n  // Reads template continuation `}...`\n  readTemplateContinuation(): void {\n    if (!this.match(tt.braceR)) {\n      this.unexpected(null, tt.braceR);\n    }\n    // rewind pos to `}`\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n\n  // Reads template string tokens.\n  readTemplateToken(): void {\n    const opening = this.input[this.state.pos];\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\n      readStringContents(\n        \"template\",\n        this.input,\n        this.state.pos + 1, // skip '`' or `}`\n        this.state.lineStart,\n        this.state.curLine,\n        this.errorHandlers_readStringContents_template,\n      );\n    this.state.pos = pos + 1; // skip '`' or `$`\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(\n        firstInvalidLoc.curLine,\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n        firstInvalidLoc.pos,\n      );\n    }\n\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n      this.finishToken(\n        tt.templateTail,\n        firstInvalidLoc ? null : opening + str + \"`\",\n      );\n    } else {\n      this.state.pos++; // skip '{'\n      this.finishToken(\n        tt.templateNonTail,\n        firstInvalidLoc ? null : opening + str + \"${\",\n      );\n    }\n  }\n\n  recordStrictModeErrors(toParseError: DeferredStrictError, at: Position) {\n    const index = at.index;\n\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, at);\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\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): 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.curPosition();\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(Errors.MissingUnicodeEscape, this.state.curPosition());\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(Errors.EscapedCharNotAnIdentifier, escStart);\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 {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word);\n    if (type !== undefined) {\n      // We don't use word as state.value here because word is a dynamic string\n      // while token label is a shared constant string\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(tt.name, word);\n    }\n  }\n\n  checkKeywordEscapes(): void {\n    const { type } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, this.state.startLoc, {\n        reservedWord: tokenLabelName(type),\n      });\n    }\n  }\n\n  /**\n   * Raise a `ParseError` given the appropriate properties. If passed a\n   * `Position` for the `at` property, raises the `ParseError` at that location.\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n   * location of that `Node`.\n   *\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\n   *\n   * The return type is marked as `never` for simplicity, as error recovery\n   * will create types in an invalid AST shape.\n   */\n  raise<ErrorDetails = object>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const error = toParseError(loc, details);\n\n    if (!this.options.errorRecovery) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n\n    return error;\n  }\n\n  /**\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n   * If `errorRecovery` is `true`, this method will first see if there is\n   * already an error stored at the same `Position`, and replaces it with the\n   * one generated here.\n   */\n  raiseOverwrite<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> | never {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        return (errors[i] = toParseError(loc, details));\n      }\n      if (error.loc.index < pos) break;\n    }\n\n    return this.raise(toParseError, at, details);\n  }\n\n  // updateContext is used by the jsx plugin\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateContext(prevType: TokenType): void {}\n\n  // Raise an unexpected token error. Can take the expected token type.\n  unexpected(loc?: Position | null, type?: TokenType): void {\n    throw this.raise(\n      Errors.UnexpectedToken,\n      loc != null ? loc : this.state.startLoc,\n      {\n        expected: type ? tokenLabelName(type) : null,\n      },\n    );\n  }\n\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n\n    throw this.raise(\n      Errors.MissingPlugin,\n      loc != null ? loc : this.state.startLoc,\n      {\n        missingPlugin: [pluginName],\n      },\n    );\n  }\n\n  expectOnePlugin(pluginNames: Plugin[]): void {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, this.state.startLoc, {\n        missingPlugin: pluginNames,\n      });\n    }\n  }\n\n  errorKhulnasoft(error: ParseErrorConstructor<object>) {\n    return (pos: number, lineStart: number, curLine: number) => {\n      this.raise(error, buildPosition(pos, lineStart, curLine));\n    };\n  }\n\n  errorHandlers_readInt: IntErrorHandlers = {\n    invalidDigit: (pos, lineStart, curLine, radix) => {\n      if (!this.options.errorRecovery) return false;\n\n      this.raise(Errors.InvalidDigit, buildPosition(pos, lineStart, curLine), {\n        radix,\n      });\n      // Continue parsing the number as if there was no invalid digit.\n      return true;\n    },\n    numericSeparatorInEscapeSequence: this.errorKhulnasoft(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorKhulnasoft(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorKhulnasoft(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorKhulnasoft(Errors.InvalidCodePoint),\n  };\n\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: (pos, lineStart, curLine) => {\n      this.recordStrictModeErrors(\n        Errors.StrictNumericEscape,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedString, // Report the error at the string quote\n        buildPosition(pos - 1, lineStart, curLine),\n      );\n    },\n  };\n\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: this.errorKhulnasoft(Errors.StrictNumericEscape),\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedTemplate,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n  };\n}\n", "import { ClassElementType } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\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, ClassElementType> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ClassScope> = [];\n  undefinedPrivateNames: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\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, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n          identifierName: name,\n        });\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementType,\n    loc: Position,\n  ) {\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\n      this.current();\n    let redefined = privateNames.has(name);\n\n    if (elementType & ClassElementType.KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n        const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n        const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n        const newKind = elementType & ClassElementType.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) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, loc: Position) {\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, loc);\n    } else {\n      // top-level\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n        identifierName: name,\n      });\n    }\n  }\n}\n", "import { Errors, type ParseErrorConstructor } from \"../parse-error.ts\";\nimport type { Position } from \"./location.ts\";\nimport type { Node } from \"../types.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\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-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous 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 enum ExpressionScopeType {\n  kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n  declare type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n    return (\n      this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n      this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === ExpressionScopeType.kParameterDeclaration;\n  }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n  | typeof Errors.AwaitExpressionFormalParameter\n  | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n  | ArrowHeadParsingParameterInitializerError\n  | typeof Errors.InvalidParenthesizedAssignment\n  | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  declarationErrors: Map<number, [ParseErrorConstructor<object>, Position]> =\n    new Map();\n  constructor(\n    type:\n      | ExpressionScopeType.kMaybeArrowParameterDeclaration\n      | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  ) {\n    super(type);\n  }\n  recordDeclarationError(\n    ParsingErrorClass: ParseErrorConstructor<object>,\n    at: Position,\n  ) {\n    const index = at.index;\n\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index: number) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n  ) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\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   */\n  recordParameterInitializerError(\n    toParseError: ArrowHeadParsingParameterInitializerError,\n    node: Node,\n  ): void {\n    const origin = node.loc.start;\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        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n\n  /**\n   * Record errors that must be thrown if the current pattern ends up being an arrow\n   * function parameter. This is used to record parenthesized identifiers, and to record\n   * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n   *\n   * A parenthesized identifier (or type assertion) 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   */\n  recordArrowParameterBindingError(\n    error: ParseErrorConstructor<object>,\n    node: Node,\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    const origin = node.loc.start;\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\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   */\n  recordAsyncArrowParametersError(at: Position): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (\n        scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n      ) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, at);\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    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, loc);\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeArrowParameterDeclaration,\n  );\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  );\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\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 const enum ParamKind {\n  // Initial Parameter flags\n  PARAM = 0b0000,\n  // track [Yield] production parameter\n  PARAM_YIELD = 0b0001,\n  // track [Await] production parameter\n  PARAM_AWAIT = 0b0010,\n  // track [Return] production parameter\n  PARAM_RETURN = 0b0100,\n  // track [In] production parameter\n  PARAM_IN = 0b1000,\n}\n\n// todo(flow->ts) - check if more granular type can be used,\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export 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() & ParamKind.PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (\n    (isAsync ? ParamKind.PARAM_AWAIT : 0) |\n    (isGenerator ? ParamKind.PARAM_YIELD : 0)\n  );\n}\n", "import type { Position } from \"../util/location.ts\";\nimport {\n  tokenIsLiteralPropertyName,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport Tokenizer from \"../tokenizer/index.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type {\n  EstreePropertyDefinition,\n  Node,\n  ObjectMethod,\n  ObjectProperty,\n  PrivateName,\n} from \"../types.d.ts\";\nimport { hasNewLine } from \"../util/whitespace.ts\";\nimport { isIdentifierChar } from \"../util/identifier.ts\";\nimport ClassScopeHandler from \"../util/class-scope.ts\";\nimport ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport { ScopeFlag } from \"../util/scopeflags.ts\";\nimport ProductionParameterHandler, {\n  ParamKind,\n} from \"../util/production-parameter.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type ScopeHandler from \"../util/scope.ts\";\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 abstract class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  abstract getScopeHandler(): new (...args: any) => ScopeHandler;\n\n  addExtra(\n    node: Partial<Node>,\n    key: string,\n    value: any,\n    enumerable: boolean = true,\n  ): void {\n    if (!node) return;\n\n    let { extra } = node;\n    if (extra == null) {\n      extra = {};\n      node.extra = extra;\n    }\n\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, { enumerable, value });\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(token: TokenType): boolean {\n    return this.state.type === token && !this.state.containsEsc;\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(token: TokenType): boolean {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(\n    token: TokenType,\n    toParseError?: ParseErrorConstructor<any>,\n  ): void {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, this.state.startLoc);\n      }\n      this.unexpected(null, token);\n    }\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 hasNewLine(\n      this.input,\n      this.state.lastTokEndLoc.index,\n      this.state.start,\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    return hasNewLine(this.input, this.state.end, this.nextTokenStart());\n  }\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(Errors.MissingSemicolon, this.state.lastTokEndLoc);\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, loc?: Position | null): void {\n    if (!this.eat(type)) {\n      this.unexpected(loc, type);\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T extends Node | ReadonlyArray<Node>>(\n    fn: (abort: (node?: T) => never) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: {\n      node: T | null;\n    } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        // eslint-disable-next-line @typescript-eslint/only-throw-error\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],\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        // @ts-expect-error casting general syntax error to parse error\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 | undefined | null,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc;\n\n    if (!andThrow) {\n      return hasErrors;\n    }\n\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n    }\n\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, doubleProtoLoc);\n    }\n\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n    }\n\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\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 tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  /**\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): node is PrivateName {\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/ecma262/#sec-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: PrivateName): 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  isObjectProperty(\n    node: Node,\n  ): node is ObjectProperty | EstreePropertyDefinition {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): node is ObjectMethod {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    this: Parser,\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, inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(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 = ParamKind.PARAM;\n    if (this.inModule) {\n      paramFlags |= ParamKind.PARAM_AWAIT;\n    }\n    this.scope.enter(ScopeFlag.PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n    const { privateKeyLoc } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\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 * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKey**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n * It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssignLoc: Position | undefined | null = null;\n  doubleProtoLoc: Position | undefined | null = null;\n  privateKeyLoc: Position | undefined | null = null;\n  optionalParametersLoc: Position | undefined | null = null;\n}\n", "import UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types.ts\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: UtilParser, 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: {\n    [key: string]: any;\n  };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-expect-error __clone is not defined in Node prototype\n  NodePrototype.__clone = function (): Node {\n    const newNode = new Node(undefined, this.start, this.loc.start);\n    const keys = Object.keys(this) as (keyof Node)[];\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        // @ts-expect-error cloning this to newNode\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 = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  if (node.raw !== undefined) {\n    // estree set node.raw instead of node.extra\n    cloned.raw = node.raw;\n  } else {\n    cloned.extra = extra;\n  }\n  cloned.value = node.value;\n  return cloned;\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n  startNode<T extends NodeType = never>(): Undone<T> {\n    const loc = this.state.startLoc;\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  startNodeAt<T extends NodeType = never>(loc: Position): Undone<T> {\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T extends NodeType = never>(\n    type: Undone<NodeType>,\n  ): Undone<T> {\n    return this.startNodeAt(type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T extends NodeType>(\n    node: Omit<T, \"type\">,\n    type: T[\"type\"],\n    endLoc: 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 as T).type = type;\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n    if (this.options.attachComment) this.processComment(node as T);\n    return node as T;\n  }\n\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = startLoc.index;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    endLoc: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\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.loc.start);\n  }\n}\n", "/*:: declare var invariant; */\n\nimport type Parser from \"../../parser/index.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeyword,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLiteralPropertyName,\n  tokenLabelName,\n  tt,\n  type TokenType,\n  tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier.ts\";\nimport FlowScopeHandler from \"./scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\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 = ParseErrorEnum`flow`({\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  // TODO: When we get proper string enums in typescript make this ReservedType.\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Cannot overwrite reserved type ${reservedType}.`,\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    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n    `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName,\n  }: {\n    invalidEnumType: string;\n    enumName: string;\n  }) =>\n    `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n  // TODO: When moving to typescript, we should either have each of the\n  // following errors only accept the specific strings they want:\n  //\n  // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n  // ...SymbolType: explicitType: \"symbol\"\n  // ...UnknownType: explicitType: null\n  //\n  // Or, alternatively, merge these three errors together into one\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n  // without alteration, and then just have its message change based on the\n  // explicitType.\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion,\n  }: {\n    enumName: string;\n    memberName: string;\n    suggestion: string;\n  }) =>\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n  }) =>\n    `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitialized: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` or `typeof` keyword.\",\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  PatternIsOptional: {\n    message:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    // For consistency in TypeScript and Flow error codes\n    ...(!process.env.BABEL_8_BREAKING\n      ? { reasonCode: \"OptionalBindingPattern\" }\n      : {}),\n  },\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: ({ reservedType }: { reservedType: string }) =>\n    `Unexpected reserved type ${reservedType}.`,\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    unsupportedExportKind,\n    suggestion,\n  }: {\n    unsupportedExportKind: string;\n    suggestion: string;\n  }) =>\n    `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` 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(\n  node: Undone<N.ImportSpecifier | N.ImportDeclaration>,\n): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\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: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n  const list1: T[] = [];\n  const list2: T[] = [];\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\";\n\ntype EnumContext = {\n  enumName: string;\n  explicitType: EnumExplicitType;\n  memberName: string;\n};\n\ntype EnumMemberInit =\n  | {\n      type: \"number\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"string\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"boolean\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"invalid\";\n      loc: Position;\n    }\n  | {\n      type: \"none\";\n      loc: Position;\n    };\n\nexport default (superClass: typeof Parser) =>\n  class FlowParserMixin extends superClass implements Parser {\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(): new (...args: any) => FlowScopeHandler {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\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      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      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.FlowPredicate {\n      const node = this.startNode<N.FlowPredicate>();\n      const moduloLoc = this.state.startLoc;\n      this.next(); // eat `%`\n      this.expectContextual(tt._checks);\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStartLoc.index > moduloLoc.index + 1) {\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, moduloLoc);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = super.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      N.FlowType | undefined | null,\n      N.FlowPredicate | undefined | null,\n    ] {\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(\n      node: Undone<N.FlowDeclareClass>,\n    ): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: Undone<N.FlowDeclareFunction>,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode<N.FlowFunctionTypeAnnotation>();\n      const typeContainer = this.startNode<N.TypeAnnotation>();\n\n      if (this.match(tt.lt)) {\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      [typeNode.returnType, 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(\n        node.id.name,\n        BindingFlag.TYPE_FLOW_DECLARE_FN,\n        node.id.loc.start,\n      );\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: Undone<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(tt._module)) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(\n              FlowErrors.NestedDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(tt._type)) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(tt._opaque)) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(tt._interface)) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: Undone<N.FlowDeclareVariable>,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_VAR,\n        node.id.loc.start,\n      );\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(\n      node: Undone<N.FlowDeclareModule>,\n    ): N.FlowDeclareModule {\n      this.scope.enter(ScopeFlag.OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = super.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode<N.BlockStatement>());\n      // @ts-expect-error refine typings\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode<N.ImportDeclaration>();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n            this.raise(\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          super.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          // @ts-expect-error refine typings\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: \"CommonJS\" | \"ES\" | null = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, bodyElement);\n          }\n          if (kind === \"ES\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\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: Undone<N.FlowDeclareExportDeclaration>,\n      insideModule?: boolean | null,\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(tt._type) || this.isContextual(tt._interface)) &&\n            !insideModule)\n        ) {\n          const label = this.state.value as\n            | \"const\"\n            | \"let\"\n            | \"type\"\n            | \"interface\";\n          throw this.raise(\n            FlowErrors.UnsupportedDeclareExportKind,\n            this.state.startLoc,\n            {\n              unsupportedExportKind: label,\n              suggestion: exportSuggestions[label],\n            },\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(tt._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(tt._interface) || // declare export interface ...\n          this.isContextual(tt._type) || // declare export type ...\n          this.isContextual(tt._opaque) // declare export opaque type ...\n        ) {\n          node = this.parseExport(\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n            /* decorators */ null,\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\n          return node as N.FlowDeclareExportDeclaration;\n        }\n      }\n\n      this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: Undone<N.FlowDeclareModuleExports>,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(tt._exports);\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: Undone<N.FlowDeclareTypeAlias>,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      const finished = this.flowParseTypeAlias(\n        node,\n      ) as unknown as N.FlowDeclareTypeAlias;\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareTypeAlias\";\n      return finished;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: Undone<N.FlowDeclareOpaqueType>,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      const finished = this.flowParseOpaqueType(\n        node,\n        true,\n      ) as unknown as N.FlowDeclareOpaqueType;\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareOpaqueType\";\n      return finished;\n    }\n\n    flowParseDeclareInterface(\n      node: Undone<N.FlowDeclareInterface>,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(node: Undone<N.FlowDeclare>, isClass: boolean): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BindingFlag.TYPE_FUNCTION : BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\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 (isClass) {\n        node.implements = [];\n        node.mixins = [];\n\n        if (this.eatContextual(tt._mixins)) {\n          do {\n            node.mixins.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n\n        if (this.eatContextual(tt._implements)) {\n          do {\n            node.implements.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\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.FlowInterfaceExtends>();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(\n          FlowErrors.UnexpectedReservedUnderscore,\n          this.state.startLoc,\n        );\n      }\n    }\n\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        startLoc,\n        {\n          reservedType: word,\n        },\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(\n        this.state.value,\n        this.state.startLoc,\n        declaration,\n      );\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\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: Undone<N.FlowOpaqueType>,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(tt._type);\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\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 nodeStartLoc = this.state.startLoc;\n\n      const node = this.startNode<N.TypeParameter>();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      // @ts-expect-error migrate to Babel types\n      node.variance = variance;\n      // @ts-expect-error migrate to Babel types\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        // @ts-expect-error migrate to Babel types\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(FlowErrors.MissingTypeParamDefault, nodeStartLoc);\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.TypeParameterDeclaration>();\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.match(tt.lt) || 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.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      } while (!this.match(tt.gt));\n      this.expect(tt.gt);\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.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = false;\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseType());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      this.expect(tt.gt);\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.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expect(tt.gt);\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.FlowInterfaceType>();\n      this.expectContextual(tt._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        ? super.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: Undone<N.FlowObjectTypeIndexer>,\n      isStatic: boolean,\n      variance?: N.FlowVariance | null,\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: Undone<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.match(tt.lt) || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(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: Undone<N.FlowFunctionTypeAnnotation>,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.match(tt.lt)) {\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: Undone<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.FlowObjectTypeAnnotation>();\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 protoStartLoc: Position | undefined | null = null;\n        let inexactStartLoc: Position | undefined | null = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(tt._proto)) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStartLoc = this.state.startLoc;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(tt._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 (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.loc.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.match(tt.lt)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n            const lookahead = this.lookahead();\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStartLoc,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStartLoc = this.state.lastTokStartLoc;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStartLoc &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            FlowErrors.UnexpectedExplicitInexactInObject,\n            inexactStartLoc,\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: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\n      isStatic: boolean,\n      protoStartLoc: Position | undefined | null,\n      variance: N.FlowVariance | undefined | null,\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              FlowErrors.InexactInsideNonObject,\n              this.state.lastTokStartLoc,\n            );\n          } else if (!allowInexact) {\n            this.raise(\n              FlowErrors.InexactInsideExact,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (variance) {\n            this.raise(FlowErrors.InexactVariance, variance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(\n            FlowErrors.UnexpectedSpreadType,\n            this.state.lastTokStartLoc,\n          );\n        }\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.raise(FlowErrors.SpreadVariance, variance);\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 = protoStartLoc != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(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              FlowErrors.ThisParamBannedInConstructor,\n              node.value.this,\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: Undone<\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n      >,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n          property.value.this,\n        );\n      }\n\n      if (length !== paramCount) {\n        this.raise(\n          property.kind === \"get\"\n            ? Errors.BadGetterArity\n            : Errors.BadSetterArity,\n          property,\n        );\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(Errors.BadSetterRestParameter, property);\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      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier | N.Identifier {\n      startLoc ??= this.state.startLoc;\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n        id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(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      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt<N.FlowGenericTypeAnnotation>(startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n      if (this.match(tt.lt)) {\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.FlowTypeofTypeAnnotation>();\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.FlowTupleTypeAnnotation>();\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.FlowFunctionTypeParam>();\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(FlowErrors.ThisParamMustBeFirst, node);\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, node);\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<N.FlowFunctionTypeParam>(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 | undefined | null;\n      _this: N.FlowFunctionTypeParam | undefined | null;\n    } {\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\n      let _this: N.FlowFunctionTypeParam | undefined | null = 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      startLoc: Position,\n      node: Undone<N.FlowType>,\n      id: N.Identifier,\n    ): N.FlowType {\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(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.FlowType {\n      const startLoc = this.state.startLoc;\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\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.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.lt: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\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\n        case tt.parenL: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\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 (tokenIsIdentifier(this.state.type) || 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\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            node as Undone<N.BooleanLiteralTypeAnnotation>,\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              FlowErrors.UnexpectedSubtractionOperand,\n              this.state.startLoc,\n            );\n          }\n          this.unexpected();\n          return;\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        case tt._typeof:\n          return this.flowParseTypeofType();\n\n        default:\n          if (tokenIsKeyword(this.state.type)) {\n            const label = tokenLabelName(this.state.type);\n            this.next();\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            if (this.isContextual(tt._interface)) {\n              return this.flowParseInterfaceType();\n            }\n\n            return this.flowIdentToTypeAnnotation(\n              startLoc,\n              node,\n              this.parseIdentifier(),\n            );\n          }\n      }\n\n      this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowType {\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<N.FlowOtherTypeAnnotation>(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              // @ts-expect-error todo(flow->ts)\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\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.FlowType {\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<N.FlowFunctionTypeAnnotation>(\n          param.loc.start,\n        );\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.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\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.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\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.FlowType {\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.FlowType {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.TypeAnnotation {\n      const node = this.startNode<N.TypeAnnotation>();\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.TypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    flowParseVariance(): N.FlowVariance | undefined | null {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode<N.FlowVariance>();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        return this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n        return;\n      }\n\n      super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode<N.TypeAnnotation>();\n\n        [\n          typeNode.typeAnnotation,\n          // @ts-expect-error predicate may not exist\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (this.state.strict && this.isContextual(tt._interface)) {\n        const lookahead = this.lookahead();\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n          const node = this.startNode<N.FlowInterface>();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (\n        (process.env.BABEL_8_BREAKING || this.plugins.get(\"flow\").enums) &&\n        this.isContextual(tt._enum)\n      ) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatementLike(flags);\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      decorators: N.Decorator[] | null,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            tokenIsIdentifier(this.state.type) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            // @ts-expect-error: refine typings\n            return this.flowParseDeclare(node);\n          }\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (expr.name === \"interface\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        ((process.env.BABEL_8_BREAKING || this.plugins.get(\"flow\").enums) &&\n          type === tt._enum)\n      ) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        ((process.env.BABEL_8_BREAKING || this.plugins.get(\"flow\").enums) &&\n          type === tt._enum)\n      ) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (\n        (process.env.BABEL_8_BREAKING || this.plugins.get(\"flow\").enums) &&\n        this.isContextual(tt._enum)\n      ) {\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\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt<N.ConditionalExpression>(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(FlowErrors.AmbiguousConditionalArrow, state.startLoc);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          noArrowAt.push(valid[0].start);\n          this.state.noArrowAt = noArrowAt;\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 (\n          node.type === \"ArrowFunctionExpression\" &&\n          node.body.type !== \"BlockStatement\"\n        ) {\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 as any as N.Expression[],\n        node.extra?.trailingCommaLoc,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.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>(\n      node: Undone<N.Node>,\n      parse: () => T,\n    ): T {\n      let result: T;\n      if (this.state.noArrowParamsConversionAt.includes(node.start)) {\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<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).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<N.TypeCastExpression>(startLoc);\n        typeCastNode.expression = newNode as N.Expression;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return newNode;\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    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (this.isContextual(tt._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            /* isInTypeExport */ true,\n          );\n          super.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          // @ts-expect-error: refine typings\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(tt._opaque)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        // @ts-expect-error: refine typings\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(tt._interface)) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseInterface(declarationNode);\n      } else if (\n        (process.env.BABEL_8_BREAKING || this.plugins.get(\"flow\").enums) &&\n        this.isContextual(tt._enum)\n      ) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(\n      node: Undone<N.Node>,\n    ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n      if (super.eatExportStar(node)) return true;\n\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n        (\n          node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>\n        ).exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      const { startLoc } = this.state;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(startLoc);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n    ) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.match(tt.lt)) {\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 { startLoc } = this.state;\n      if (this.isContextual(tt._declare)) {\n        if (super.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(FlowErrors.DeclareClassElement, startLoc);\n        } else if (member.value) {\n          this.raise(FlowErrors.DeclareClassFieldInitializer, member.value);\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(Errors.InvalidIdentifier, this.state.curPosition(), {\n          identifierName: fullWord,\n        });\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        this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          this.finishOp(tt.questionDot, 2);\n        } else {\n          // allow double nullable types in Flow: ??string\n          this.finishOp(tt.question, 1);\n        }\n      } else if (\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n      ) {\n        this.state.pos += 2; // eat \"@@\"\n        this.readIterator();\n      } else {\n        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): void {\n      if (\n        !isLHS &&\n        node.type === \"AssignmentExpression\" &&\n        node.left.type === \"TypeCastExpression\"\n      ) {\n        node.left = this.typeCastToParameter(node.left) as N.Assignable;\n      }\n      super.toAssignable(node, isLHS);\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\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      super.toAssignableList(exprList, trailingCommaLoc, 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:\n        | ReadonlyArray<N.Expression | N.SpreadElement>\n        | ReadonlyArray<N.Expression | N.RestElement>,\n      isParenthesizedExpr?: boolean,\n    ):\n      | ReadonlyArray<N.Expression | N.SpreadElement>\n      | ReadonlyArray<N.Expression | N.RestElement> {\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(FlowErrors.TypeCastInPattern, expr.typeAnnotation);\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\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    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(type, isParenthesized, binding)\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.match(tt.lt) || 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 as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\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(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n        // estree support\n      } else if (\n        // @ts-expect-error TS does not know about the face that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        // @ts-expect-error estree\n        method.value.params\n      ) {\n        // @ts-expect-error estree\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\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 as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\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.match(tt.lt)) {\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n      }\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode<N.FlowClassImplements>();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.match(tt.lt)) {\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(FlowErrors.GetterMayNotHaveThisParam, param);\n        } else if (this.isThisParam(param)) {\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, param);\n        }\n      }\n    }\n\n    parsePropertyNamePrefixOperator(\n      node: N.ObjectOrClassMember | N.ClassMember,\n    ): void {\n      node.variance = this.flowParseVariance();\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      if ((prop as any).variance) {\n        this.unexpected((prop as any).variance.loc.start);\n      }\n      delete (prop as any).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.match(tt.lt) && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      const result = super.parseObjPropValue(\n        prop,\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        // @ts-expect-error: refine typings\n        (result.value || result).typeParameters = typeParameters;\n      }\n      return result;\n    }\n\n    parseFunctionParamType(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(FlowErrors.PatternIsOptional, param);\n        }\n        if (this.isThisParam(param)) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, param);\n        }\n\n        (param as any as 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(FlowErrors.ThisParamAnnotationRequired, param);\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamNoDefault, param);\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault(\n      startLoc?: Position | null,\n      left?: N.Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(FlowErrors.TypeBeforeInitializer, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          FlowErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    parseImportSpecifierLocal<\n      T extends\n        | N.ImportSpecifier\n        | N.ImportDefaultSpecifier\n        | N.ImportNamespaceSpecifier,\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\"type\"]): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\n    }\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        if (!isExport) return true;\n        const ch = this.lookaheadCharCode();\n        return ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        if (!phase && this.match(tt._default)) {\n          // TODO: Align with our TS AST and always add .exportKind\n          return;\n        }\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? phase : \"value\";\n      } else {\n        if (phase === \"type\" && this.match(tt.star)) this.unexpected();\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(\n      specifier: any,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      const firstIdent = specifier.imported;\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(tt._as) && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !tokenIsKeywordOrIdentifier(this.state.type)\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 {\n        if (\n          specifierTypeKind !== null &&\n          tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type foo`\n          specifier.imported = this.parseIdentifier(true);\n          specifier.importKind = specifierTypeKind;\n        } else {\n          if (importedIsString) {\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\n            throw this.raise(Errors.ImportBindingIsString, specifier, {\n              importName: firstIdent.value,\n            });\n          }\n          /*:: invariant(firstIdent instanceof N.Node) */\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n        }\n\n        if (this.eatContextual(tt._as)) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = cloneIdentifier(specifier.imported);\n        }\n      }\n\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, specifier);\n      }\n\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.loc.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.loc.start,\n          true,\n          true,\n        );\n      }\n\n      return this.finishImportSpecifier(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(\n      node: Undone<N.Function>,\n      isConstructor: boolean,\n    ): void {\n      // @ts-expect-error kind may not index node\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, isConstructor);\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 | null,\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.match(tt.lt))\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 currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (jsx?.error || this.match(tt.lt)) {\n        state = state || this.state.clone();\n\n        let typeParameters: N.TypeParameterDeclaration;\n\n        const arrow = this.tryParse((abort: () => never) => {\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>(() => {});\n          // <T>(() => {}: any);\n          if (arrowExpression.extra?.parenthesized) abort();\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          // (<T>() => {}: any);\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n          if (expr.type !== \"ArrowFunctionExpression\") abort();\n\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          | undefined\n          | null = 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            // @ts-expect-error: refine tryParse typings\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n                typeParameters,\n              );\n            }\n            return arrow.node;\n          }\n\n          // @ts-expect-error: refine typings\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          FlowErrors.UnexpectedTokenAfterTypeParameter,\n          typeParameters,\n        );\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error todo(flow->ts)\n        const result = this.tryParse<N.TypeAnnotation>(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode<N.TypeAnnotation>();\n\n          [\n            typeNode.typeAnnotation,\n            // @ts-expect-error (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        // @ts-expect-error todo(flow->ts)\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: Undone<N.ArrowFunctionExpression>,\n      params:\n        | Array<N.Expression | N.SpreadElement>\n        | Array<N.Expression | N.RestElement>,\n    ): void {\n      if (this.state.noArrowParamsConversionAt.includes(node.start)) {\n        node.params = params as N.ArrowFunctionExpression[\"params\"];\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction?: boolean | null,\n      strictModeChanged: boolean = true,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.includes(node.start)\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(FlowErrors.ThisParamMustBeFirst, node.params[i]);\n        }\n      }\n\n      super.checkParams(\n        node,\n        allowDuplicates,\n        isArrowFunction,\n        strictModeChanged,\n      );\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow && !this.state.noArrowAt.includes(this.state.start),\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls?: boolean | null,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.includes(startLoc.index)\n      ) {\n        this.next();\n\n        const node = this.startNodeAt<N.CallExpression>(startLoc);\n        node.callee = base;\n        node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.match(tt.lt)\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        // @ts-expect-error: refine tryParse typings\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, 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          // @ts-expect-error: refine tryParse typings\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, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\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 = this.startNodeAt<N.OptionalCallExpression>(startLoc);\n        node.callee = base;\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (!noCalls && this.shouldParseTypes() && this.match(tt.lt)) {\n        const node = this.startNodeAt<\n          N.OptionalCallExpression | N.CallExpression\n        >(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 = super.parseCallExpressionArguments(tt.parenR, false);\n          if (subscriptState.optionalChainMember) {\n            (node as Undone<N.OptionalCallExpression>).optional = false;\n          }\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\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      let targs = null;\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n      this.parseFunctionParams(node, false);\n      if (!this.parseArrow(node)) return;\n      return super.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(\n          FlowErrors.UnterminatedFlowComment,\n          this.state.curPosition(),\n        );\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | undefined {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          throw this.raise(FlowErrors.NestedFlowComment, this.state.startLoc);\n        }\n        this.hasFlowCommentCompletion();\n        const commentSkip = this.skipFlowComment();\n        if (commentSkip) {\n          this.state.pos += commentSkip;\n          this.state.hasFlowComment = true;\n        }\n        return;\n      }\n\n      return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n    }\n\n    skipFlowComment(): number | false {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          // @ts-expect-error testing whether a number is included\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(Errors.UnterminatedComment, this.state.curPosition());\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, loc, {\n        memberName,\n        enumName,\n      });\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      loc: Position,\n      enumContext: EnumContext,\n    ) {\n      return this.raise(\n        !enumContext.explicitType\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n          : enumContext.explicitType === \"symbol\"\n            ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n            : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n        loc,\n        enumContext,\n      );\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      loc: Position,\n      details: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, loc, details);\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitialized(\n      node: N.Node,\n      details: {\n        enumName: string;\n      },\n    ): void {\n      this.raise(\n        FlowErrors.EnumStringMemberInconsistentlyInitialized,\n        node,\n        details,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startLoc = this.state.startLoc;\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\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\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              loc: literal.loc.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        default:\n          return { type: \"invalid\", loc: startLoc };\n      }\n    }\n\n    flowEnumMemberRaw(): {\n      id: N.Identifier;\n      init: EnumMemberInit;\n    } {\n      const loc = this.state.startLoc;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\" as const, loc };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      loc: Position,\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(loc, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string;\n      explicitType: EnumExplicitType;\n    }): {\n      members: {\n        booleanMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumBooleanMember\" }\n        >[];\n        numberMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumNumberMember\" }\n        >[];\n        stringMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumStringMember\" }\n        >[];\n        defaultedMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumDefaultedMember\" }\n        >[];\n      };\n      hasUnknownMembers: boolean;\n    } {\n      const seenNames = new Set();\n      const members = {\n        // @ts-expect-error: migrate to Babel types\n        booleanMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        numberMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        stringMembers: [],\n        // @ts-expect-error: migrate to Babel types\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.FlowEnumMember>();\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.raise(FlowErrors.EnumInvalidMemberName, id, {\n            memberName,\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n            enumName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.raise(FlowErrors.EnumDuplicateMemberName, id, {\n            memberName,\n            enumName,\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.loc,\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.loc, 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.loc, 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.loc, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.loc,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, 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      {\n        enumName,\n      }: {\n        enumName: string;\n      },\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.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string;\n    }): EnumExplicitType {\n      if (!this.eatContextual(tt._of)) return null;\n\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.raise(\n          FlowErrors.EnumInvalidExplicitTypeUnknownSupplied,\n          this.state.startLoc,\n          {\n            enumName,\n          },\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.raise(FlowErrors.EnumInvalidExplicitType, this.state.startLoc, {\n          enumName,\n          invalidEnumType: value,\n        });\n      }\n\n      return value;\n    }\n\n    flowEnumBody(node: Undone<N.FlowEnumBody>, id: N.Identifier): N.Node {\n      const enumName = id.name;\n      const nameLoc = id.loc.start;\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.loc.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.loc.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.raise(FlowErrors.EnumInconsistentMemberValues, nameLoc, {\n              enumName,\n            });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(\n      node: Undone<N.FlowEnumDeclaration>,\n    ): N.FlowEnumDeclaration {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), id);\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    // check if the next token is a tt.lt\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", "const entities: {\n  __proto__: null;\n  [name: string]: string;\n} = {\n  __proto__: null,\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} as const;\nexport default entities;\n", "import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport {\n  tokenComesBeforeExpression,\n  tokenIsKeyword,\n  tokenLabelName,\n  type TokenType,\n  tt,\n} from \"../../tokenizer/types.ts\";\nimport type { TokContext } from \"../../tokenizer/context.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { isNewLine } from \"../../util/whitespace.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\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  // FIXME: Unify with Errors.UnexpectedToken\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity,\n  }: {\n    unexpected: string;\n    HTMLEntity: string;\n  }) =>\n    `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\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/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXTag | null): object is N.JSXFragmentTag {\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  // @ts-expect-error - object is 'never'\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n  jsxParseOpeningElementAfterName(\n    node: N.JSXOpeningElement,\n  ): N.JSXOpeningElement;\n}\n\nexport default (superClass: typeof Parser) =>\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\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(\n            JsxErrors.UnterminatedJsxContent,\n            this.state.startLoc,\n          );\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.canStartJSXElement) {\n                ++this.state.pos;\n                this.finishToken(tt.jsxTagStart);\n              } else {\n                super.getTokenFromCode(ch);\n              }\n              return;\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            this.finishToken(tt.jsxText, out);\n            return;\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              this.raise(JsxErrors.UnexpectedToken, this.state.curPosition(), {\n                unexpected: this.input[this.state.pos],\n                HTMLEntity:\n                  ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\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(Errors.UnterminatedString, this.state.startLoc);\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      this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      const startPos = ++this.state.pos;\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n        ++this.state.pos;\n\n        let radix = 10;\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n          radix = 16;\n          ++this.state.pos;\n        }\n\n        const codePoint = this.readInt(\n          radix,\n          /* len */ undefined,\n          /* forceLen */ false,\n          /* allowNumSeparator */ \"bail\",\n        );\n        if (\n          codePoint !== null &&\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\n        ) {\n          ++this.state.pos;\n          return String.fromCodePoint(codePoint);\n        }\n      } else {\n        let count = 0;\n        let semi = false;\n        while (\n          count++ < 10 &&\n          this.state.pos < this.length &&\n          !(semi = this.codePointAtPos(this.state.pos) === charCodes.semicolon)\n        ) {\n          ++this.state.pos;\n        }\n\n        if (semi) {\n          const desc = this.input.slice(startPos, this.state.pos);\n          const entity = XHTMLEntities[desc];\n          ++this.state.pos;\n\n          if (entity) {\n            return entity;\n          }\n        }\n      }\n\n      // Not a valid entity\n      this.state.pos = startPos;\n      return \"&\";\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      this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode<N.JSXIdentifier>();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (tokenIsKeyword(this.state.type)) {\n        node.name = tokenLabelName(this.state.type);\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.JSXIdentifier {\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<N.JSXNamespacedName>(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 startLoc = this.state.startLoc;\n      let node: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression =\n        this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt<N.JSXMemberExpression>(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      | N.JSXExpressionContainer\n      | N.JSXElement\n      | N.StringLiteral {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.setContext(tc.brace);\n          this.next();\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(JsxErrors.AttributeIsEmpty, node);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom() as N.JSXElement | N.StringLiteral;\n\n        default:\n          throw this.raise(JsxErrors.UnsupportedJsxValue, this.state.startLoc);\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(this.state.lastTokEndLoc);\n      return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.setContext(tc.j_expr);\n      this.state.canStartJSXElement = true;\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: Undone<N.JSXExpressionContainer>,\n      previousContext: TokContext,\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              JsxErrors.UnexpectedSequenceExpression,\n              expression.expressions[1],\n            );\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.setContext(previousContext);\n      this.state.canStartJSXElement = true;\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.JSXSpreadAttribute {\n      const node = this.startNode<N.JSXAttribute | N.JSXSpreadAttribute>();\n      if (this.match(tt.braceL)) {\n        this.setContext(tc.brace);\n        this.next();\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.setContext(tc.j_oTag);\n        this.state.canStartJSXElement = true;\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      startLoc: Position,\n    ): N.JSXOpeningElement | N.JSXOpeningFragment {\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(\n        node as Undone<N.JSXOpeningElement>,\n      );\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: Undone<N.JSXOpeningElement>,\n    ): N.JSXOpeningElement {\n      const attributes: (N.JSXAttribute | N.JSXSpreadAttribute)[] = [];\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      startLoc: Position,\n    ): N.JSXClosingElement | N.JSXClosingFragment {\n      const node = this.startNodeAt<N.JSXClosingFragment | N.JSXClosingElement>(\n        startLoc,\n      );\n      if (this.eat(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(startLoc: Position): N.JSXElement | N.JSXFragment {\n      const node = this.startNodeAt<N.JSXElement | N.JSXFragment>(startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(startLoc);\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseLiteral(this.state.value, \"JSXText\"));\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode<\n                N.JSXSpreadChild | N.JSXExpressionContainer\n              >();\n              this.setContext(tc.brace);\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\n                );\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              this.unexpected();\n          }\n        }\n\n        if (\n          isFragment(openingElement) &&\n          !isFragment(closingElement) &&\n          closingElement !== null\n        ) {\n          this.raise(JsxErrors.MissingClosingTagFragment, closingElement);\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n            openingTagName: getQualifiedJSXName(openingElement.name),\n          });\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n              openingTagName: 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.match(tt.lt)) {\n        throw this.raise(\n          JsxErrors.UnwrappedAdjacentJSXElements,\n          this.state.startLoc,\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.JSXFragment {\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startLoc);\n    }\n\n    setContext(newContext: TokContext) {\n      const { context } = this.state;\n      context[context.length - 1] = newContext;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.match(tt.lt) &&\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.replaceToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    skipSpace() {\n      const curContext = this.curContext();\n      if (!curContext.preserveSpace) super.skipSpace();\n    }\n\n    getTokenFromCode(code: number): void {\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        this.jsxReadToken();\n        return;\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          this.jsxReadWord();\n          return;\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          this.finishToken(tt.jsxTagEnd);\n          return;\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          this.jsxReadString(code);\n          return;\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.canStartJSXElement &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        this.finishToken(tt.jsxTagStart);\n        return;\n      }\n\n      super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\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.canStartJSXElement = false;\n      } else if (type === tt.jsxTagStart) {\n        // start opening tag context\n        context.push(tc.j_oTag);\n      } else if (type === tt.jsxTagEnd) {\n        const out = context[context.length - 1];\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.canStartJSXElement =\n            context[context.length - 1] === tc.j_expr;\n        } else {\n          this.setContext(tc.j_expr);\n          this.state.canStartJSXElement = true;\n        }\n      } else {\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n      }\n    }\n  };\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\nimport { Errors } from \"../../parse-error.ts\";\n\nconst enum TsNameType {\n  Types = 1 << 0,\n  // enums (which are also in .types)\n  Enums = 1 << 1,\n  // const enums (which are also in .enums and .types)\n  ConstEnums = 1 << 2,\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  Classes = 1 << 3,\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 = 1 << 4,\n}\n\nclass TypeScriptScope extends Scope {\n  tsNames: Map<string, TsNameType> = new Map();\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  importsStack: Set<string>[] = [];\n\n  createScope(flags: ScopeFlag): TypeScriptScope {\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n    return new TypeScriptScope(flags);\n  }\n\n  enter(flags: ScopeFlag): void {\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n\n    super.enter(flags);\n  }\n\n  exit() {\n    const flags = super.exit();\n\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.pop();\n    }\n\n    return flags;\n  }\n\n  hasImport(name: string, allowShadow?: boolean) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, loc, {\n          identifierName: name,\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n\n    const scope = this.currentScope();\n    let type = scope.tsNames.get(name) || 0;\n\n    if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.tsNames.set(name, type | TsNameType.ExportOnlyBindings);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n\n    if (bindingType & BindingFlag.KIND_TYPE) {\n      if (!(bindingType & BindingFlag.KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      type = type | TsNameType.Types;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n      type = type | TsNameType.Enums;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n      type = type | TsNameType.ConstEnums;\n    }\n    if (bindingType & BindingFlag.FLAG_CLASS) {\n      type = type | TsNameType.Classes;\n    }\n    if (type) scope.tsNames.set(name, type);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    const type = scope.tsNames.get(name);\n    if ((type & TsNameType.Enums) > 0) {\n      if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n        const wasConst = (type & TsNameType.ConstEnums) > 0;\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (\n      bindingType & BindingFlag.FLAG_CLASS &&\n      (type & TsNameType.Classes) > 0\n    ) {\n      if (scope.names.get(name) & NameType.Lexical) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BindingFlag.KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BindingFlag.KIND_TYPE && (type & TsNameType.Types) > 0) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n\n    if (this.hasImport(name)) return;\n\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      const type = scope.tsNames.get(name);\n      if (\n        (type & TsNameType.Types) > 0 ||\n        (type & TsNameType.ExportOnlyBindings) > 0\n      ) {\n        return;\n      }\n    }\n\n    super.checkLocalExport(id);\n  }\n}\n", "import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types.ts\";\nimport type {\n  AssignmentPattern,\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Identifier,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  ObjectOrClassMember,\n  ClassMember,\n  ObjectMember,\n  TsNamedTypeElementBase,\n  PrivateName,\n  ObjectExpression,\n  ObjectPattern,\n  ArrayPattern,\n  AssignmentProperty,\n  Assignable,\n} from \"../types.ts\";\nimport type { Pos, Position } from \"../util/location.ts\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier.ts\";\nimport { NodeUtils, type Undone } from \"./node.ts\";\nimport { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"./util.ts\";\nimport { Errors, type LValAncestor } from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport const enum ParseBindingListFlags {\n  ALLOW_EMPTY = 1 << 0,\n  IS_FUNCTION_PARAMS = 1 << 1,\n  IS_CONSTRUCTOR_PARAMS = 1 << 2,\n}\n\nexport default abstract class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  abstract parseIdentifier(liberal?: boolean): Identifier;\n  abstract parseMaybeAssign(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): T;\n  abstract parseObjPropValue(\n    prop: any,\n    startLoc: Position | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void;\n  abstract parsePropertyName(\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n  ): void;\n  abstract parsePrivateName(): PrivateName;\n  // Forward-declaration: defined in statement.js\n  abstract parseDecorator(): Decorator;\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 The expression atom\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n   *              If isLHS is `false`, we are in an arrow function parameters list.\n   */\n  toAssignable(node: Node, isLHS: boolean = false): asserts node is Assignable {\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 `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(\n            Errors.InvalidParenthesizedAssignment,\n            node,\n          );\n        } else if (\n          parenthesized.type !== \"MemberExpression\" &&\n          !this.isOptionalMemberExpression(parenthesized)\n        ) {\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(Errors.InvalidParenthesizedAssignment, node);\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, node);\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 as 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 as Node).type === \"RestElement\" &&\n            node.extra?.trailingCommaLoc\n          ) {\n            this.raise(Errors.RestTrailingComma, node.extra.trailingCommaLoc);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\": {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n        break;\n      }\n\n      case \"SpreadElement\": {\n        throw new Error(\n          \"Internal @babel/parser error (this is a bug, please report it).\" +\n            \" SpreadElement should be converted by .toAssignable's caller.\",\n        );\n      }\n\n      case \"ArrayExpression\":\n        (node as Node).type = \"ArrayPattern\";\n        this.toAssignableList(\n          node.elements,\n          node.extra?.trailingCommaLoc,\n          isLHS,\n        );\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, node.left.loc.end);\n        }\n\n        (node as 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  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod,\n        prop.key,\n      );\n    } else if (prop.type === \"SpreadElement\") {\n      (prop as Node).type = \"RestElement\";\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ false);\n      this.toAssignable(arg, isLHS);\n\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, prop);\n      }\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 | SpreadElement | RestElement)[],\n    trailingCommaLoc: Position | undefined | null,\n    isLHS: boolean,\n  ): void {\n    const end = exprList.length - 1;\n\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n\n      if (elt.type === \"SpreadElement\") {\n        (elt as unknown as RestElement).type = \"RestElement\";\n        const arg = elt.argument;\n        this.checkToRestConversion(arg, /* allowPattern */ true);\n        this.toAssignable(arg, isLHS);\n      } else {\n        this.toAssignable(elt, isLHS);\n      }\n\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, elt);\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, trailingCommaLoc);\n        }\n      }\n    }\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(\n          element => element === null || this.isAssignable(element),\n        );\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:\n      | ReadonlyArray<Expression | SpreadElement>\n      | ReadonlyArray<Expression | RestElement>,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ):\n    | ReadonlyArray<Expression | SpreadElement>\n    | ReadonlyArray<Expression | RestElement> {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList:\n      | ReadonlyArray<Expression | SpreadElement>\n      | ReadonlyArray<Expression | RestElement>,\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    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): SpreadElement {\n    const node = this.startNode<SpreadElement>();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\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(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(this: Parser): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode<ArrayPattern>();\n        this.next();\n        // @ts-expect-error: Fixme: TSParameterProperty can not be assigned to node.elements\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          ParseBindingListFlags.ALLOW_EMPTY,\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    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags,\n  ): Array<Pattern | TSParameterProperty> {\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\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        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        let rest: Pattern = this.parseRestBinding();\n        if (\n          (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n          flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n        ) {\n          rest = this.parseFunctionParamType(rest);\n        }\n        elts.push(rest);\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(Errors.UnsupportedParameterDecorator, this.state.startLoc);\n        }\n        // invariant: hasPlugin(\"decorators-legacy\")\n        while (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n        }\n        elts.push(this.parseAssignableListItem(flags, decorators));\n      }\n    }\n    return elts;\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  parseBindingRestProperty(\n    this: Parser,\n    prop: Undone<RestElement>,\n  ): RestElement {\n    this.next(); // eat '...'\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  // https://tc39.es/ecma262/#prod-BindingProperty\n  parseBindingProperty(this: Parser): AssignmentProperty | RestElement {\n    const { type, startLoc } = this.state;\n    if (type === tt.ellipsis) {\n      return this.parseBindingRestProperty(this.startNode());\n    }\n\n    const prop = this.startNode<AssignmentProperty>();\n    if (type === tt.privateName) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      prop.key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop);\n    }\n    prop.method = false;\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      false /* isGenerator */,\n      false /* isAsync */,\n      true /* isPattern */,\n      false /* isAccessor */,\n    );\n  }\n\n  parseAssignableListItem(\n    this: Parser,\n    flags: ParseBindingListFlags,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    if (\n      (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n      flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n    ) {\n      this.parseFunctionParamType(left);\n    }\n    const elt = this.parseMaybeDefault(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  parseFunctionParamType(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    this: Parser,\n    startLoc?: Position | null,\n    left?: Pattern | null,\n  ): Pattern {\n    startLoc ??= this.state.startLoc;\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  /**\n   * Return information use in determining whether a Node of a given type is an LVal,\n   * possibly given certain additional context information.\n   *\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\n   * responsibilities. If we can definitively determine with the information\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\n   * value is easy: just return `true` or `false`. However, if it is a valid\n   * LVal *ancestor*, and thus its descendants must be subsequently visited to\n   * continue the \"investigation\", then this method should return the relevant\n   * child key as a `string`. In some special cases, you additionally want to\n   * convey that this node should be treated as if it were parenthesized. In\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n   * The `string`-only return option is actually just a shorthand for:\n   * `[key: string, parenthesized: false]`.\n   *\n   * @param type A Node `type` string\n   * @param isUnparenthesizedInAssign\n   *        Whether the node in question is unparenthesized and its parent\n   *        is either an assignment pattern or an assignment expression.\n   * @param binding\n   *        The binding operation that is being considered for this potential\n   *        LVal.\n   * @returns `true` or `false` if we can immediately determine whether the node\n   *          type in question can be treated as an `LVal`.\n   *          A `string` key to traverse if we must check this child.\n   *          A `[string, boolean]` tuple if we need to check this child and\n   *          treat is as parenthesized.\n   */\n  isValidLVal(\n    type: string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isUnparenthesizedInAssign: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    binding: BindingFlag,\n  ): string | boolean | [string, boolean] {\n    switch (type) {\n      case \"AssignmentPattern\":\n        return \"left\";\n      case \"RestElement\":\n        return \"argument\";\n      case \"ObjectProperty\":\n        return \"value\";\n      case \"ParenthesizedExpression\":\n        return \"expression\";\n      case \"ArrayPattern\":\n        return \"elements\";\n      case \"ObjectPattern\":\n        return \"properties\";\n    }\n    return false;\n  }\n\n  // Overridden by the estree plugin\n  isOptionalMemberExpression(expression: Node): boolean {\n    return expression.type === \"OptionalMemberExpression\";\n  }\n\n  /**\n   * Verify that a target expression is an lval (something that can be assigned to).\n   *\n   * @param expression The expression in question to check.\n   * @param ancestor\n   *        The relevant ancestor to provide context information for the error\n   *        if the check fails.\n   * @param binding\n   *        The desired binding type. If the given expression is an identifier\n   *        and `binding` is not `BindingFlag.TYPE_NONE`, `checkLVal` will register binding\n   *        to the parser scope See also `src/util/scopeflags.js`\n   * @param checkClashes\n   *        An optional string set to check if an identifier name is included.\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\n   *        used in tracking duplicates in function parameter lists. If it is\n   *        false, `checkLVal` will skip duplicate checks\n   * @param strictModeChanged\n   *        Whether an identifier has been parsed in a sloppy context but should\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @param hasParenthesizedAncestor\n   *        This is only used internally during recursive calls, and you should\n   *        not have to set it yourself.\n   */\n\n  checkLVal(\n    expression:\n      | Expression\n      | ObjectMember\n      | RestElement\n      | Pattern\n      | TSParameterProperty,\n    ancestor: LValAncestor,\n    binding: BindingFlag = BindingFlag.TYPE_NONE,\n    checkClashes: Set<string> | false = false,\n    strictModeChanged: boolean = false,\n    hasParenthesizedAncestor: boolean = false,\n  ): void {\n    const type = expression.type;\n\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    if (this.isObjectMethod(expression)) return;\n\n    const isOptionalMemberExpression =\n      this.isOptionalMemberExpression(expression);\n\n    if (isOptionalMemberExpression || type === \"MemberExpression\") {\n      if (isOptionalMemberExpression) {\n        this.expectPlugin(\"optionalChainingAssign\", expression.loc.start);\n        if (ancestor.type !== \"AssignmentExpression\") {\n          this.raise(Errors.InvalidLhsOptionalChaining, expression, {\n            ancestor,\n          });\n        }\n      }\n\n      if (binding !== BindingFlag.TYPE_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, expression);\n      }\n      return;\n    }\n\n    if (type === \"Identifier\") {\n      this.checkIdentifier(expression, binding, strictModeChanged);\n\n      const { name } = expression;\n\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, expression);\n        } else {\n          checkClashes.add(name);\n        }\n      }\n\n      return;\n    }\n\n    const validity = this.isValidLVal(\n      type,\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n        ancestor.type === \"AssignmentExpression\",\n      binding,\n    );\n\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass =\n        binding === BindingFlag.TYPE_NONE\n          ? Errors.InvalidLhs\n          : Errors.InvalidLhsBinding;\n\n      this.raise(ParseErrorClass, expression, { ancestor });\n      return;\n    }\n\n    let key: string, isParenthesizedExpression: boolean;\n    if (typeof validity === \"string\") {\n      key = validity;\n      isParenthesizedExpression = type === \"ParenthesizedExpression\";\n    } else {\n      [key, isParenthesizedExpression] = validity;\n    }\n\n    const nextAncestor =\n      type === \"ArrayPattern\" || type === \"ObjectPattern\"\n        ? ({ type } as const)\n        : ancestor;\n\n    // @ts-expect-error key may not index expression.\n    const val = expression[key];\n    if (Array.isArray(val)) {\n      for (const child of val) {\n        if (child) {\n          this.checkLVal(\n            child,\n            nextAncestor,\n            binding,\n            checkClashes,\n            strictModeChanged,\n            isParenthesizedExpression,\n          );\n        }\n      }\n    } else if (val) {\n      this.checkLVal(\n        val,\n        nextAncestor,\n        binding,\n        checkClashes,\n        strictModeChanged,\n        isParenthesizedExpression,\n      );\n    }\n  }\n\n  checkIdentifier(\n    at: Identifier,\n    bindingType: BindingFlag,\n    strictModeChanged: boolean = false,\n  ) {\n    if (\n      this.state.strict &&\n      (strictModeChanged\n        ? isStrictBindReservedWord(at.name, this.inModule)\n        : isStrictBindOnlyReservedWord(at.name))\n    ) {\n      if (bindingType === BindingFlag.TYPE_NONE) {\n        this.raise(Errors.StrictEvalArguments, at, { referenceName: at.name });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, at, {\n          bindingName: at.name,\n        });\n      }\n    }\n\n    if (bindingType & BindingFlag.FLAG_NO_LET_IN_LEXICAL && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, at);\n    }\n\n    if (!(bindingType & BindingFlag.TYPE_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingFlag) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      /* falls through */\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, node);\n    }\n  }\n\n  checkCommaAfterRest(\n    close: (typeof charCodes)[keyof typeof charCodes],\n  ): boolean {\n    if (!this.match(tt.comma)) {\n      return false;\n    }\n\n    this.raise(\n      this.lookaheadCharCode() === close\n        ? Errors.RestTrailingComma\n        : Errors.ElementAfterRest,\n      this.state.startLoc,\n    );\n\n    return true;\n  }\n}\n", "import type State from \"../../tokenizer/state.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsTSDeclarationStart,\n  tokenIsTSTypeOperator,\n  tokenOperatorPrecedence,\n  tokenIsKeywordOrIdentifier,\n  tt,\n  type TokenType,\n  tokenIsTemplate,\n  tokenCanStartExpression,\n} from \"../../tokenizer/types.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../../util/location.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport { ScopeFlag, BindingFlag } from \"../../util/scopeflags.ts\";\nimport TypeScriptScopeHandler from \"./scope.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { ParamKind } from \"../../util/production-parameter.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\nimport type { Pattern } from \"../../types.ts\";\nimport type { Expression } from \"../../types.ts\";\nimport type { IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | \"const\"\n  | N.Accessibility\n  | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n  if (x == null) {\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\ntype ModifierBase = {\n  accessibility?: N.Accessibility;\n} & {\n  [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName,\n  }: {\n    propertyName: string;\n  }) =>\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccessorCannotBeOptional:\n    \"An 'accessor' property cannot be declared optional.\",\n  AccessorCannotDeclareThisParameter:\n    \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccessorCannotHaveTypeParameters: \"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  ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n    \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier:\n    // `Accessibility modifier already seen: ${modifier}` would be more helpful.\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ({ modifier }: { modifier: N.Accessibility }) =>\n      `Accessibility modifier already seen.`,\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n    `Duplicate modifier: '${modifier}'.`,\n  // `token` matches the terminology used by typescript:\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n  EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' 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  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers,\n  }: {\n    modifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\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  InitializerNotAllowedInAmbientContext:\n    \"Initializers are not allowed in ambient contexts.\",\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier,\n  }: {\n    modifier: TsModifier;\n  }) =>\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers,\n  }: {\n    orderedModifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression:\n    \"Invalid property access after an instantiation expression. \" +\n    \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName:\n    \"'interface' declarations must be followed by an identifier.\",\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    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature:\n    \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam:\n    \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion:\n    \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccessorCannotHaveOptionalParameter:\n    \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccessorCannotHaveRestParameter:\n    \"A 'set' accessor cannot have rest parameter.\",\n  SetAccessorCannotHaveReturnType:\n    \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName,\n  }: {\n    typeParameterName: string;\n  }) =>\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier:\n    \"Static class blocks cannot have any modifier.\",\n  TupleOptionalAfterType:\n    \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\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  TypeModifierIsUsedInTypeExports:\n    \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports:\n    \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\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: ({ type }: { type: string }) =>\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n});\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(value: string): N.TsKeywordTypeType | 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): modifier is N.Accessibility {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nfunction tsIsVarianceAnnotations(\n  modifier: string,\n): modifier is N.VarianceAnnotations {\n  return modifier === \"in\" || modifier === \"out\";\n}\n\ntype ClassWithMixin<\n  T extends new (...args: any) => any,\n  M extends object,\n> = T extends new (...args: infer P) => infer I\n  ? new (...args: P) => I & M\n  : never;\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class TypeScriptParserMixin extends superClass implements Parser {\n    getScopeHandler(): new (...args: any) => 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 tokenIsIdentifier(this.state.type);\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      );\n    }\n\n    tsNextTokenOnSameLineAndCanFollowModifier() {\n      this.next();\n      if (this.hasPrecedingLineBreak()) {\n        return false;\n      }\n      return this.tsTokenCanFollowModifier();\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      if (this.match(tt._static)) {\n        this.next();\n        return this.tsTokenCanFollowModifier();\n      }\n      return this.tsNextTokenOnSameLineAndCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T extends TsModifier>(\n      allowedModifiers: T[],\n      stopOnStartOfClassStaticBlock?: boolean,\n    ): T | undefined | null {\n      if (\n        !tokenIsIdentifier(this.state.type) &&\n        this.state.type !== tt._in &&\n        this.state.type !== tt._const\n      ) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (allowedModifiers.includes(modifier)) {\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n          return undefined;\n        }\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n          return modifier;\n        }\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({ modified: node, allowedModifiers: [\"public\"] });\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n     */\n    tsParseModifiers<N extends ModifierBase>(\n      {\n        allowedModifiers,\n        disallowedModifiers,\n        stopOnStartOfClassStaticBlock,\n        errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n      }: {\n        allowedModifiers: readonly TsModifier[];\n        disallowedModifiers?: TsModifier[];\n        stopOnStartOfClassStaticBlock?: boolean;\n        errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\n      },\n      modified: N,\n    ): void {\n      const enforceOrder = (\n        loc: Position,\n        modifier: TsModifier,\n        before: TsModifier,\n        after: TsModifier,\n      ) => {\n        if (modifier === before && modified[after]) {\n          this.raise(TSErrors.InvalidModifiersOrder, loc, {\n            orderedModifiers: [before, after],\n          });\n        }\n      };\n      const incompatible = (\n        loc: Position,\n        modifier: TsModifier,\n        mod1: TsModifier,\n        mod2: TsModifier,\n      ) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(TSErrors.IncompatibleModifiers, loc, {\n            modifiers: [mod1, mod2],\n          });\n        }\n      };\n\n      for (;;) {\n        const { startLoc } = this.state;\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n          stopOnStartOfClassStaticBlock,\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(TSErrors.DuplicateAccessibilityModifier, startLoc, {\n              modifier,\n            });\n          } else {\n            enforceOrder(startLoc, modifier, modifier, \"override\");\n            enforceOrder(startLoc, modifier, modifier, \"static\");\n            enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else if (tsIsVarianceAnnotations(modifier)) {\n          if (modified[modifier]) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          }\n          modified[modifier] = true;\n\n          enforceOrder(startLoc, modifier, \"in\", \"out\");\n        } else {\n          if (Object.hasOwn(modified, modifier)) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          } else {\n            enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"static\", \"override\");\n            enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n            incompatible(startLoc, modifier, \"declare\", \"override\");\n            incompatible(startLoc, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(errorTemplate, startLoc, {\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.match(tt.gt);\n      }\n    }\n\n    tsParseList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): 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 extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n          refTrailingCommaPos,\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 extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T | undefined,\n      expectSuccess: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] | undefined {\n      const result: T[] = [];\n      let trailingCommaPos = -1;\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n        trailingCommaPos = -1;\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          trailingCommaPos = this.state.lastTokStartLoc.index;\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      if (refTrailingCommaPos) {\n        refTrailingCommaPos.value = trailingCommaPos;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expect(tt.lt);\n        }\n      }\n\n      const result = this.tsParseDelimitedList(\n        kind,\n        parseElement,\n        refTrailingCommaPos,\n      );\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expect(tt.gt);\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node = this.startNode<N.TsImportType>();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(TSErrors.UnsupportedImportTypeArgument, this.state.startLoc);\n      }\n\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.argument = super.parseExprAtom() as N.StringLiteral;\n      if (\n        this.hasPlugin(\"importAttributes\") ||\n        (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\"))\n      ) {\n        node.options = null;\n      }\n      if (this.eat(tt.comma)) {\n        if (\n          process.env.BABEL_8_BREAKING ||\n          !this.hasPlugin(\"importAssertions\")\n        ) {\n          this.expectPlugin(\"importAttributes\");\n        }\n        if (!this.match(tt.parenR)) {\n          node.options = super.parseMaybeAssignAllowIn();\n          this.eat(tt.comma);\n        }\n      }\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        // In this instance, the entity name will actually itself be a\n        // qualifier, so allow it to be a reserved word as well.\n        node.qualifier = this.tsParseEntityName();\n      }\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseEntityName(allowReservedWords: boolean = true): N.TsEntityName {\n      let entity: N.TsEntityName = this.parseIdentifier(allowReservedWords);\n      while (this.eat(tt.dot)) {\n        const node: Undone<N.TsQualifiedName> =\n          this.startNodeAtNode<N.TsQualifiedName>(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 = this.startNode<N.TsTypeReference>();\n      node.typeName = this.tsParseEntityName();\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\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 = this.startNodeAtNode<N.TsTypePredicate>(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 = this.startNode<N.TsThisType>();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node = this.startNode<N.TsTypeQuery>();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        node.exprName = this.tsParseEntityName();\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\"],\n      disallowedModifiers: [\n        \"const\",\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseConstModifier = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"const\"],\n      // for better error recovery\n      disallowedModifiers: [\"in\", \"out\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n    });\n\n    tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\", \"const\"],\n      disallowedModifiers: [\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseTypeParameter(\n      parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\n    ): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n\n      parseModifiers(node);\n\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      parseModifiers: (node: N.TsTypeParameter) => void,\n    ): N.TsTypeParameterDeclaration | undefined | null {\n      if (this.match(tt.lt)) {\n        return this.tsParseTypeParameters(parseModifiers);\n      }\n    }\n\n    tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      const refTrailingCommaPos = { value: -1 };\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this, parseModifiers),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n        refTrailingCommaPos,\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeParameters, node);\n      }\n      if (refTrailingCommaPos.value !== -1) {\n        this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\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: Undone<N.TsSignatureDeclaration>,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n\n      // https://github.com/babel/babel/issues/9231\n      const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n      const returnTypeKey = process.env.BABEL_8_BREAKING\n        ? \"returnType\"\n        : \"typeAnnotation\";\n\n      signature.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      this.expect(tt.parenL);\n      signature[paramsKey] = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): Array<\n      N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern\n    > {\n      const list = super.parseBindingList(\n        tt.parenR,\n        charCodes.rightParenthesis,\n        ParseBindingListFlags.IS_FUNCTION_PARAMS,\n      );\n      for (const pattern of list) {\n        const { type } = pattern;\n        if (type === \"AssignmentPattern\" || type === \"TSParameterProperty\") {\n          this.raise(TSErrors.UnsupportedSignatureParameterKind, pattern, {\n            type,\n          });\n        }\n      }\n      return list as Exclude<\n        (typeof list)[0],\n        N.AssignmentPattern | N.TSParameterProperty\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: Undone<\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n      >,\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      if (tokenIsIdentifier(this.state.type)) {\n        this.next();\n        return this.match(tt.colon);\n      }\n      return false;\n    }\n\n    tsTryParseIndexSignature(\n      node: Undone<N.TsIndexSignature>,\n    ): N.TsIndexSignature | undefined {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return;\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.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, node);\n        }\n        const method: N.TsMethodSignature = nodeAny;\n        if (method.kind && this.match(tt.lt)) {\n          this.raise(\n            TSErrors.AccessorCannotHaveTypeParameters,\n            this.state.curPosition(),\n          );\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        const paramsKey = process.env.BABEL_8_BREAKING\n          ? \"params\"\n          : \"parameters\";\n        const returnTypeKey = process.env.BABEL_8_BREAKING\n          ? \"returnType\"\n          : \"typeAnnotation\";\n        if (method.kind === \"get\") {\n          if (method[paramsKey].length > 0) {\n            this.raise(Errors.BadGetterArity, this.state.curPosition());\n            if (this.isThisParam(method[paramsKey][0])) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method[paramsKey].length !== 1) {\n            this.raise(Errors.BadSetterArity, this.state.curPosition());\n          } else {\n            const firstParameter = method[paramsKey][0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveOptionalParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveRestParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n          if (method[returnTypeKey]) {\n            this.raise(\n              TSErrors.SetAccessorCannotHaveReturnType,\n              method[returnTypeKey],\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.match(tt.lt)) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id = this.startNode<N.Identifier>();\n        this.next();\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\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        {\n          allowedModifiers: [\"readonly\"],\n          disallowedModifiers: [\n            \"declare\",\n            \"abstract\",\n            \"private\",\n            \"protected\",\n            \"public\",\n            \"static\",\n            \"override\",\n          ],\n        },\n        node,\n      );\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      super.parsePropertyName(node);\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        super.parsePropertyName(node);\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node = this.startNode<N.TsTypeLiteral>();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): Array<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(tt._readonly);\n      }\n      if (this.isContextual(tt._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    tsParseMappedType(): N.TsMappedType {\n      const node = this.startNode<N.TsMappedType>();\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(tt._readonly);\n      } else if (this.eatContextual(tt._readonly)) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      if (process.env.BABEL_8_BREAKING) {\n        node.key = this.tsParseTypeParameterName() as N.Identifier;\n        node.constraint = this.tsExpectThenParseType(tt._in);\n      } else {\n        const typeParameter = this.startNode<N.TsTypeParameter>();\n        typeParameter.name = this.tsParseTypeParameterName();\n        typeParameter.constraint = this.tsExpectThenParseType(tt._in);\n        // @ts-expect-error for Babel 7\n        node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      }\n      node.nameType = this.eatContextual(tt._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 = this.startNode<N.TsTupleType>();\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      node.elementTypes.forEach(elementNode => {\n        const { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(TSErrors.OptionalTypeBeforeRequired, elementNode);\n        }\n\n        seenOptionalElement ||=\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\n      // parses `...TsType[]`\n\n      const { startLoc } = this.state;\n\n      const rest = this.eat(tt.ellipsis);\n\n      let labeled: boolean;\n      let label: N.Identifier;\n      let optional: boolean;\n      let type: N.TsNamedTupleMember | N.TsType;\n\n      const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n      const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n      if (chAfterWord === charCodes.colon) {\n        labeled = true;\n        optional = false;\n        label = this.parseIdentifier(true);\n        this.expect(tt.colon);\n        type = this.tsParseType();\n      } else if (chAfterWord === charCodes.questionMark) {\n        optional = true;\n        const startLoc = this.state.startLoc;\n        const wordName = this.state.value;\n        const typeOrLabel = this.tsParseNonArrayType();\n\n        if (this.lookaheadCharCode() === charCodes.colon) {\n          labeled = true;\n          label = this.createIdentifier(\n            this.startNodeAt<N.Identifier>(startLoc),\n            wordName,\n          );\n          this.expect(tt.question);\n          this.expect(tt.colon);\n          type = this.tsParseType();\n        } else {\n          labeled = false;\n          type = typeOrLabel;\n          this.expect(tt.question);\n        }\n      } else {\n        type = this.tsParseType();\n        optional = this.eat(tt.question);\n        // In this case (labeled === true) could be only in invalid label.\n        // E.g. [x.y:type]\n        // An error is raised while processing node.\n        labeled = this.eat(tt.colon);\n      }\n\n      if (labeled) {\n        let labeledNode: Undone<N.TsNamedTupleMember>;\n        if (label) {\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(label);\n          labeledNode.optional = optional;\n          labeledNode.label = label;\n          labeledNode.elementType = type;\n\n          if (this.eat(tt.question)) {\n            labeledNode.optional = true;\n            this.raise(\n              TSErrors.TupleOptionalAfterType,\n              this.state.lastTokStartLoc,\n            );\n          }\n        } else {\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(type);\n          labeledNode.optional = optional;\n          this.raise(TSErrors.InvalidTupleMemberLabel, type);\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          labeledNode.label = type;\n          labeledNode.elementType = this.tsParseType();\n        }\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode = this.startNodeAtNode<N.TsOptionalType>(type);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(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.TsParenthesizedType>();\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 = this.startNode<\n        N.TsFunctionOrConstructorType | N.TsConstructorType\n      >();\n      if (type === \"TSConstructorType\") {\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsInAllowConditionalTypesContext(() =>\n        this.tsFillSignature(tt.arrow, node),\n      );\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node = this.startNode<N.TsLiteralType>();\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          // @ts-expect-error refine typings\n          node.literal = super.parseExprAtom();\n          break;\n        default:\n          this.unexpected();\n      }\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsType {\n      const node = this.startNode<N.TsLiteralType>();\n      node.literal = super.parseTemplate(false);\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    parseTemplateSubstitution(): N.TsType | N.Expression {\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(tt._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.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 = this.startNode<N.TsLiteralType>();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              this.unexpected();\n            }\n            // @ts-expect-error: parseMaybeUnary must returns unary expression\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 startLoc = this.state.startLoc;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startLoc.index);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.templateNonTail:\n        case tt.templateTail:\n          return this.tsParseTemplateLiteralType();\n        default: {\n          const { type } = this.state;\n          if (\n            tokenIsIdentifier(type) ||\n            type === tt._void ||\n            type === tt._null\n          ) {\n            const nodeType =\n              type === tt._void\n                ? \"TSVoidKeyword\"\n                : type === tt._null\n                  ? \"TSNullKeyword\"\n                  : keywordTypeFromName(this.state.value);\n            if (\n              nodeType !== undefined &&\n              this.lookaheadCharCode() !== charCodes.dot\n            ) {\n              const node = this.startNode<N.TsKeywordType>();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n      }\n\n      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 = this.startNodeAtNode<N.TsArrayType>(type);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAtNode<N.TsIndexedAccessType>(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.TsTypeOperator {\n      const node = this.startNode<N.TsTypeOperator>();\n      const operator = this.state.value;\n      this.next(); // eat 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: Undone<N.TsTypeOperator>) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(TSErrors.UnexpectedReadonly, node);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode<N.TsInferType>();\n      this.expectContextual(tt._infer);\n      const typeParameter = this.startNode<N.TsTypeParameter>();\n      typeParameter.name = this.tsParseTypeParameterName();\n      typeParameter.constraint = this.tsTryParse(() =>\n        this.tsParseConstraintForInferType(),\n      );\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseConstraintForInferType() {\n      if (this.eat(tt._extends)) {\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\n          this.tsParseType(),\n        );\n        if (\n          this.state.inDisallowConditionalTypesContext ||\n          !this.match(tt.question)\n        ) {\n          return constraint;\n        }\n      }\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const isTypeOperator =\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n      return isTypeOperator\n        ? this.tsParseTypeOperator()\n        : this.isContextual(tt._infer)\n          ? this.tsParseInferType()\n          : this.tsInAllowConditionalTypesContext(() =>\n              this.tsParseArrayTypeOrHigher(),\n            );\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\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.match(tt.lt)) {\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 (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        // Return true if we can parse an object pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          this.parseObjectLike(tt.braceR, true);\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      if (this.match(tt.bracketL)) {\n        this.next();\n        // Return true if we can parse an array pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          super.parseBindingList(\n            tt.bracketR,\n            charCodes.rightSquareBracket,\n            ParseBindingListFlags.ALLOW_EMPTY,\n          );\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\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 = this.startNode<N.TsTypeAnnotation>();\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            node.asserts = true;\n            (node as N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            thisTypePredicate.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 as 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 | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n    }\n\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeAnnotation();\n      }\n    }\n\n    tsTryParseType(): N.TsType | undefined {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): N.Identifier | undefined {\n      const id = this.parseIdentifier();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (this.state.type !== tt._asserts) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          Errors.InvalidEscapedReservedWord,\n          this.state.lastTokStartLoc,\n          {\n            reservedWord: \"asserts\",\n          },\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\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\n      if (\n        this.state.inDisallowConditionalTypesContext ||\n        this.hasPrecedingLineBreak() ||\n        !this.eat(tt._extends)\n      ) {\n        return type;\n      }\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\n      node.checkType = type;\n\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n        this.tsParseNonConditionalType(),\n      );\n\n      this.expect(tt.question);\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      this.expect(tt.colon);\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._new\n      );\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      if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n        this.raise(TSErrors.ReservedTypeAssertion, this.state.startLoc);\n      }\n\n      const node = this.startNode<N.TsTypeAssertion>();\n      node.typeAnnotation = this.tsInType(() => {\n        this.next(); // \"<\"\n        return this.match(tt._const)\n          ? this.tsParseTypeReference()\n          : this.tsParseType();\n      });\n      this.expect(tt.gt);\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(token: \"extends\"): Array<N.TSInterfaceHeritage>;\n    tsParseHeritageClause(token: \"implements\"): Array<N.TSClassImplements>;\n    tsParseHeritageClause(\n      token: \"extends\" | \"implements\",\n    ): Array<N.TSClassImplements> | Array<N.TSInterfaceHeritage> {\n      const originalStartLoc = this.state.startLoc;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        () => {\n          const node = this.startNode<\n            N.TSClassImplements | N.TSInterfaceHeritage\n          >();\n          node.expression = this.tsParseEntityName();\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.tsParseTypeArguments();\n          }\n\n          return this.finishNode(\n            node,\n            // @ts-expect-error Babel 7 vs Babel 8\n            process.env.BABEL_8_BREAKING\n              ? token === \"extends\"\n                ? \"TSInterfaceHeritage\"\n                : \"TSClassImplements\"\n              : \"TSExpressionWithTypeArguments\",\n          );\n        },\n      );\n\n      if (!delimitedList.length) {\n        this.raise(TSErrors.EmptyHeritageClauseType, originalStartLoc, {\n          token,\n        });\n      }\n\n      return delimitedList as\n        | Array<N.TSClassImplements>\n        | Array<N.TSInterfaceHeritage>;\n    }\n\n    tsParseInterfaceDeclaration(\n      node: Undone<N.TsInterfaceDeclaration>,\n      properties: {\n        declare?: true;\n      } = {},\n    ): N.TsInterfaceDeclaration | null {\n      if (this.hasFollowingLineBreak()) return null;\n      this.expectContextual(tt._interface);\n      if (properties.declare) node.declare = true;\n      if (tokenIsIdentifier(this.state.type)) {\n        node.id = this.parseIdentifier();\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_INTERFACE);\n      } else {\n        node.id = null;\n        this.raise(TSErrors.MissingInterfaceName, this.state.startLoc);\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body = this.startNode<N.TSInterfaceBody>();\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.checkIdentifier(node.id, BindingFlag.TYPE_TS_TYPE);\n\n      node.typeAnnotation = this.tsInType(() => {\n        node.typeParameters = this.tsTryParseTypeParameters(\n          this.tsParseInOutModifiers,\n        );\n\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(tt._intrinsic) &&\n          this.lookahead().type !== tt.dot\n        ) {\n          const node = this.startNode<N.TsKeywordType>();\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    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = false;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | undefined {\n      if (this.match(token)) {\n        return this.tsNextThenParseType();\n      }\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsInType(() => {\n        this.expect(token);\n        return this.tsParseType();\n      });\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsInType(() => {\n        this.next();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node = this.startNode<N.TsEnumMember>();\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        ? super.parseStringLiteral(this.state.value)\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = super.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: Undone<N.TsEnumDeclaration>,\n      properties: {\n        const?: true;\n        declare?: true;\n      } = {},\n    ): N.TsEnumDeclaration {\n      if (properties.const) node.const = true;\n      if (properties.declare) node.declare = true;\n      this.expectContextual(tt._enum);\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(\n        node.id,\n        node.const ? BindingFlag.TYPE_TS_CONST_ENUM : BindingFlag.TYPE_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 = this.startNode<N.TsModuleBlock>();\n      this.scope.enter(ScopeFlag.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      super.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: Undone<N.TsModuleDeclaration>,\n      nested: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = this.parseIdentifier();\n\n      if (!nested) {\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n      }\n\n      if (this.eat(tt.dot)) {\n        const inner = this.startNode<N.TsModuleDeclaration>();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        // @ts-expect-error Fixme: refine typings\n        node.body = inner;\n      } else {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.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(tt._global)) {\n        node.global = true;\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.id = super.parseStringLiteral(this.state.value);\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.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: Undone<N.TsImportEqualsDeclaration>,\n      maybeDefaultIdentifier?: N.Identifier | null,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      node.isExport = isExport || false;\n      node.id = maybeDefaultIdentifier || this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_VALUE_IMPORT);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(TSErrors.ImportAliasHasImportType, moduleReference);\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(tt._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 = this.startNode<N.TsExternalModuleReference>();\n      this.expectContextual(tt._require);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n      this.sawUnambiguousESM = true;\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 extends N.NodeBase | undefined | null>(\n      f: () => T,\n    ): T | undefined | null {\n      const result = this.tryParse(\n        abort =>\n          // @ts-expect-error todo(flow->ts)\n          f() || abort(),\n      );\n\n      if (result.aborted || !result.node) return;\n      if (result.error) this.state = result.failState;\n      // @ts-expect-error refine typings\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      }\n      this.state = state;\n    }\n\n    tsTryParseDeclare(nany: any): N.Declaration | undefined {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      let startType = this.state.type;\n      let kind: \"let\" | null;\n\n      if (this.isContextual(tt._let)) {\n        startType = tt._var;\n        kind = \"let\";\n      }\n\n      // @ts-expect-error refine typings\n      return this.tsInAmbientContext(() => {\n        switch (startType) {\n          case tt._function:\n            nany.declare = true;\n            return super.parseFunctionStatement(\n              nany,\n              /* async */ false,\n              /* isHangingDeclaration */ false,\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 know 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._enum:\n            return this.tsParseEnumDeclaration(nany, { declare: true });\n          case tt._global:\n            return this.tsParseAmbientExternalModuleDeclaration(nany);\n          case tt._const:\n          case tt._var:\n            if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n              nany.declare = true;\n              return this.parseVarStatement(\n                nany,\n                kind || this.state.value,\n                true,\n              );\n            }\n\n            // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n            this.expect(tt._const);\n            return this.tsParseEnumDeclaration(nany, {\n              const: true,\n              declare: true,\n            });\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(nany, {\n              declare: true,\n            });\n            if (result) return result;\n          }\n          // fallthrough\n          default:\n            if (tokenIsIdentifier(startType)) {\n              return this.tsParseDeclaration(\n                nany,\n                this.state.value,\n                /* next */ true,\n                /* decorators */ null,\n              );\n            }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): N.Declaration | undefined {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    tsParseExpressionStatement(\n      node: Undone<N.TsModuleDeclaration>,\n      expr: N.Identifier,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n          }\n          return declaration;\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(ScopeFlag.TS_MODULE);\n            this.prodParam.enter(ParamKind.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          break;\n\n        default:\n          return this.tsParseDeclaration(\n            node,\n            expr.name,\n            /* next */ false,\n            decorators,\n          );\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined | null {\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) || tokenIsIdentifier(this.state.type))\n          ) {\n            return this.tsParseAbstractDeclaration(node, decorators);\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 (tokenIsIdentifier(this.state.type)) {\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case \"namespace\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\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      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined {\n      if (!this.match(tt.lt)) return;\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: Undone<N.ArrowFunctionExpression> | undefined =\n        this.tsTryParseAndCatch(() => {\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n          node.typeParameters = this.tsParseTypeParameters(\n            this.tsParseConstModifier,\n          );\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) return;\n\n      return super.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    // Used when parsing type arguments from ES productions, where the first token\n    // has been created without state.inType. Thus we need to rescan the lt token.\n    tsParseTypeArgumentsInExpression():\n      | N.TsTypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.tsParseTypeArguments();\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\n      node.params = this.tsInType(() =>\n        // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n        this.tsInNoContext(() => {\n          this.expect(tt.lt);\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeArguments, node);\n      } else if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      return tokenIsTSDeclarationStart(this.state.type);\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      flags: ParseBindingListFlags,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include modifiers in range\n      const startLoc = this.state.startLoc;\n\n      const modified: ModifierBase = {};\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\n            \"public\",\n            \"private\",\n            \"protected\",\n            \"override\",\n            \"readonly\",\n          ],\n        },\n        modified,\n      );\n      const accessibility = modified.accessibility;\n      const override = modified.override;\n      const readonly = modified.readonly;\n      if (\n        !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\n        (accessibility || readonly || override)\n      ) {\n        this.raise(TSErrors.UnexpectedParameterModifier, startLoc);\n      }\n\n      const left = this.parseMaybeDefault();\n      if (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n        this.parseFunctionParamType(left);\n      }\n      const elt = this.parseMaybeDefault(left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp = this.startNodeAt<N.TSParameterProperty>(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(TSErrors.UnsupportedParameterPropertyKind, pp);\n        }\n        pp.parameter = elt as any as 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    isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n      return (\n        (node.type === \"TSParameterProperty\" &&\n          super.isSimpleParameter(node.parameter)) ||\n        super.isSimpleParameter(node)\n      );\n    }\n\n    tsDisallowOptionalPattern(node: Undone<N.Function>) {\n      for (const param of node.params) {\n        if (\n          param.type !== \"Identifier\" &&\n          (param as any).optional &&\n          !this.state.isAmbientContext\n        ) {\n          this.raise(TSErrors.PatternIsOptional, param);\n        }\n      }\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params: N.Expression[],\n      trailingCommaLoc?: Position | null,\n    ): void {\n      super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n      this.tsDisallowOptionalPattern(node);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\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\" || type === \"ClassPrivateMethod\"\n            ? \"TSDeclareMethod\"\n            : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        return this.finishNode(node, bodilessType);\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(TSErrors.DeclareFunctionHasImplementation, node);\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        }\n      }\n      this.tsDisallowOptionalPattern(node);\n\n      return 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 bodiless function, we need to do it here.\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(node);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: Array<N.Expression | N.SpreadElement>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(TSErrors.UnexpectedTypeAnnotation, node.typeAnnotation);\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: Array<N.Expression | undefined | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | undefined | null> {\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(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\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\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\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.canStartJSXElement = false;\n        this.next();\n\n        const nonNullExpression =\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\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      // handles 'f<<T>'\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        let missingParenErrorLoc;\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 =\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\n            if (asyncArrowFn) {\n              return asyncArrowFn;\n            }\n          }\n\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\n          if (!typeArguments) return;\n\n          if (isOptionalCall && !this.match(tt.parenL)) {\n            missingParenErrorLoc = this.state.curPosition();\n            return;\n          }\n\n          if (tokenIsTemplate(this.state.type)) {\n            const result = super.parseTaggedTemplateExpression(\n              base,\n              startLoc,\n              state,\n            );\n            result.typeParameters = typeArguments;\n            return result;\n          }\n\n          if (!noCalls && this.eat(tt.parenL)) {\n            const node = this.startNodeAt<\n              N.CallExpression | N.OptionalCallExpression\n            >(startLoc);\n            node.callee = base;\n            // possibleAsync always false here, because we would have handled it above.\n            // @ts-expect-error (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              (node as Undone<N.OptionalCallExpression>).optional =\n                isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          }\n\n          const tokenType = this.state.type;\n          if (\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\n            tokenType === tt.gt ||\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n            tokenType === tt.bitShiftR ||\n            // a<b>c is (a<b)>c\n            (tokenType !== tt.parenL &&\n              tokenCanStartExpression(tokenType) &&\n              !this.hasPrecedingLineBreak())\n          ) {\n            // Bail out.\n            return;\n          }\n\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n          node.expression = base;\n          node.typeParameters = typeArguments;\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (\n            result.type === \"TSInstantiationExpression\" &&\n            (this.match(tt.dot) ||\n              (this.match(tt.questionDot) &&\n                this.lookaheadCharCode() !== charCodes.leftParenthesis))\n          ) {\n            this.raise(\n              TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n              this.state.startLoc,\n            );\n          }\n          return result;\n        }\n      }\n\n      return super.parseSubscript(base, startLoc, noCalls, state);\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      const { callee } = node;\n      if (\n        callee.type === \"TSInstantiationExpression\" &&\n        !callee.extra?.parenthesized\n      ) {\n        node.typeParameters = callee.typeParameters;\n        node.callee = callee.expression;\n      }\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartLoc: Position,\n      minPrec: number,\n    ): N.Expression {\n      let isSatisfies: boolean;\n      if (\n        tokenOperatorPrecedence(tt._in) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        (this.isContextual(tt._as) ||\n          (isSatisfies = this.isContextual(tt._satisfies)))\n      ) {\n        const node = this.startNodeAt<\n          N.TsAsExpression | N.TsSatisfiesExpression\n        >(leftStartLoc);\n        node.expression = left;\n        node.typeAnnotation = this.tsInType(() => {\n          this.next(); // \"as\" or \"satisfies\"\n          if (this.match(tt._const)) {\n            if (isSatisfies) {\n              this.raise(Errors.UnexpectedKeyword, this.state.startLoc, {\n                keyword: \"const\",\n              });\n            }\n            return this.tsParseTypeReference();\n          }\n\n          return this.tsParseType();\n        });\n        this.finishNode(\n          node,\n          isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n        );\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(\n          // @ts-expect-error todo(flow->ts)\n          node,\n          leftStartLoc,\n          minPrec,\n        );\n      }\n\n      return super.parseExprOp(left, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ): void {\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      if (!this.state.isAmbientContext) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          TSErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\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    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        const ch = this.lookaheadCharCode();\n        return isExport\n          ? ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk\n          : ch !== charCodes.equalsTo;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? \"type\" : \"value\";\n      } else {\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    ): N.AnyImport {\n      if (this.match(tt.string)) {\n        node.importKind = \"value\";\n        return super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      let importNode;\n      if (\n        tokenIsIdentifier(this.state.type) &&\n        this.lookaheadCharCode() === charCodes.equalsTo\n      ) {\n        node.importKind = \"value\";\n        return this.tsParseImportEqualsDeclaration(\n          node as Undone<N.TsImportEqualsDeclaration>,\n        );\n      } else if (this.isContextual(tt._type)) {\n        const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n          node as Undone<N.ImportDeclaration>,\n          /* isExport */ false,\n        );\n        if (this.lookaheadCharCode() === charCodes.equalsTo) {\n          return this.tsParseImportEqualsDeclaration(\n            node as Undone<N.TsImportEqualsDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        } else {\n          importNode = super.parseImportSpecifiersAndAfter(\n            node as Undone<N.ImportDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        }\n      } else {\n        importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\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        // @ts-expect-error refine typings\n        importNode.specifiers.length > 1 &&\n        // @ts-expect-error refine typings\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, importNode);\n      }\n\n      return importNode;\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        this.next(); // eat `tt._import`\n        const nodeImportEquals = node as Undone<N.TsImportEqualsDeclaration>;\n        let maybeDefaultIdentifier: N.Identifier | null = null;\n        if (\n          this.isContextual(tt._type) &&\n          // We pass false here, because we are parsing an `import ... =`\n          this.isPotentialImportPhase(/* isExport */ false)\n        ) {\n          maybeDefaultIdentifier = this.parseMaybeImportPhase(\n            nodeImportEquals,\n            /* isExport */ false,\n          );\n        } else {\n          nodeImportEquals.importKind = \"value\";\n        }\n        return this.tsParseImportEqualsDeclaration(\n          nodeImportEquals,\n          maybeDefaultIdentifier,\n          /* isExport */ true,\n        );\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign = node as Undone<N.TsExportAssignment>;\n        assign.expression = super.parseExpression();\n        this.semicolon();\n        this.sawUnambiguousESM = true;\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(tt._as)) {\n        // `export as namespace A;`\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(tt._namespace);\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        return super.parseExport(\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n          decorators,\n        );\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._class\n      );\n    }\n\n    parseExportDefaultExpression(): N.ExportDefaultDeclaration[\"declaration\"] {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode<N.Class>();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        return this.parseClass(cls, true, true);\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.match(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(\n          this.startNode<N.TsInterfaceDeclaration>(),\n        );\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseVarStatement(\n      node: N.VariableDeclaration,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n      allowMissingInitializer: boolean = false,\n    ) {\n      const { isAmbientContext } = this.state;\n      const declaration = super.parseVarStatement(\n        node,\n        kind,\n        allowMissingInitializer || isAmbientContext,\n      );\n\n      if (!isAmbientContext) return declaration;\n\n      for (const { id, init } of declaration.declarations) {\n        // Empty initializer is the easy case that we want.\n        if (!init) continue;\n\n        // var and let aren't ever allowed initializers.\n        if (kind !== \"const\" || !!id.typeAnnotation) {\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, init);\n        } else if (\n          !isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))\n        ) {\n          this.raise(\n            TSErrors.ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n            init,\n          );\n        }\n      }\n\n      return declaration;\n    }\n\n    parseStatementContent(\n      flags: ParseStatementFlag,\n      decorators?: N.Decorator[] | null,\n    ): N.Statement {\n      if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n        const node = this.startNode<N.TsEnumDeclaration>();\n        this.expect(tt._const); // eat 'const'\n        return this.tsParseEnumDeclaration(node, { const: true });\n      }\n\n      if (this.isContextual(tt._enum)) {\n        return this.tsParseEnumDeclaration(\n          this.startNode<N.TsEnumDeclaration>(),\n        );\n      }\n\n      if (this.isContextual(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(this.startNode());\n        if (result) return result;\n      }\n\n      return super.parseStatementContent(flags, decorators);\n    }\n\n    parseAccessModifier(): N.Accessibility | undefined | null {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: readonly 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    tsIsStartOfStaticBlocks() {\n      return (\n        this.isContextual(tt._static) &&\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\n      );\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const modifiers = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n        \"static\",\n      ] as const;\n      this.tsParseModifiers(\n        {\n          allowedModifiers: modifiers,\n          disallowedModifiers: [\"in\", \"out\"],\n          stopOnStartOfClassStaticBlock: true,\n          errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n        },\n        member,\n      );\n\n      const callParseClassMemberWithIsStatic = () => {\n        if (this.tsIsStartOfStaticBlocks()) {\n          this.next(); // eat \"static\"\n          this.next(); // eat \"{\"\n          if (this.tsHasSomeModifiers(member, modifiers)) {\n            this.raise(\n              TSErrors.StaticBlockCannotHaveModifier,\n              this.state.curPosition(),\n            );\n          }\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n        } else {\n          this.parseClassMemberWithIsStatic(\n            classBody,\n            member,\n            state,\n            !!member.static,\n          );\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: Undone<N.ClassMember | N.TsIndexSignature>,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(\n        member as Undone<N.TsIndexSignature>,\n      );\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member as any).abstract) {\n          this.raise(TSErrors.IndexSignatureHasAbstract, member);\n        }\n        if ((member as any).accessibility) {\n          this.raise(TSErrors.IndexSignatureHasAccessibility, member, {\n            modifier: (member as any).accessibility,\n          });\n        }\n        if ((member as any).declare) {\n          this.raise(TSErrors.IndexSignatureHasDeclare, member);\n        }\n        if ((member as any).override) {\n          this.raise(TSErrors.IndexSignatureHasOverride, member);\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member as any).abstract) {\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, member);\n      }\n\n      if ((member as any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(TSErrors.OverrideNotInSubClass, member);\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(\n        classBody,\n        member as Undone<N.ClassMember>,\n        state,\n        isStatic,\n      );\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 as any).readonly && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasReadonly, methodOrProp);\n      }\n\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasDeclare, methodOrProp);\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    // @ts-expect-error plugin overrides interfaces\n    parseExpressionStatement(\n      node: Undone<N.ExpressionStatement>,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? // @ts-expect-error refine typings\n            this.tsParseExpressionStatement(node, expr, decorators)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr, decorators);\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\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\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\n          startLoc,\n          refExpressionErrors,\n        );\n      }\n\n      const result = this.tryParse(() =>\n        super.parseConditional(expr, 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<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).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<N.TsTypeCastExpression>(startLoc);\n        typeCastNode.expression = node as N.Expression;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n      }\n\n      // Store original location\n      const startLoc = this.state.startLoc;\n\n      const isDeclare = this.eatContextual(tt._declare);\n\n      if (\n        isDeclare &&\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(\n          TSErrors.ExpectedAmbientAfterExportDeclare,\n          this.state.startLoc,\n        );\n      }\n\n      const isIdentifier = tokenIsIdentifier(this.state.type);\n      const declaration: N.Declaration | undefined | null =\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\n        super.parseExportDeclaration(node);\n\n      if (!declaration) return null;\n\n      if (\n        declaration.type === \"TSInterfaceDeclaration\" ||\n        declaration.type === \"TSTypeAliasDeclaration\" ||\n        isDeclare\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (isDeclare) {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, 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 | null,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType?: BindingFlag,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node as any).declare\n          ? BindingFlag.TYPE_TS_AMBIENT\n          : BindingFlag.TYPE_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n    ): void {\n      if (!node.optional) {\n        if (this.eat(tt.bang)) {\n          node.definite = true;\n        } else if (this.eat(tt.question)) {\n          node.optional = true;\n        }\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 (\n        this.state.isAmbientContext &&\n        !(node.readonly && !node.typeAnnotation) &&\n        this.match(tt.eq)\n      ) {\n        this.raise(\n          TSErrors.DeclareClassFieldHasInitializer,\n          this.state.startLoc,\n        );\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(\n          TSErrors.AbstractPropertyHasInitializer,\n          this.state.startLoc,\n          {\n            propertyName:\n              key.type === \"Identifier\" && !node.computed\n                ? key.name\n                : `[${this.input.slice(key.start, key.end)}]`,\n          },\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      // @ts-expect-error abstract may not index node\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, node);\n      }\n\n      // @ts-expect-error accessibility may not index node\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, node, {\n          // @ts-expect-error refine typings\n          modifier: node.accessibility,\n        });\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    parseClassAccessorProperty(\n      node: N.ClassAccessorProperty,\n    ): N.ClassAccessorProperty {\n      this.parseClassPropertyAnnotation(node);\n      if (node.optional) {\n        this.raise(TSErrors.AccessorCannotBeOptional, node);\n      }\n      return super.parseClassAccessorProperty(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        this.tsParseConstModifier,\n      );\n      if (typeParameters && isConstructor) {\n        this.raise(TSErrors.ConstructorHasTypeParameters, typeParameters);\n      }\n\n      // @ts-expect-error declare does not exist in ClassMethod\n      const { declare = false, kind } = method;\n\n      if (declare && (kind === \"get\" || kind === \"set\")) {\n        this.raise(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        this.tsParseConstModifier,\n      );\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    declareClassPrivateMethodInScope(\n      node: N.ClassPrivateMethod | N.TSDeclareMethod,\n      kind: number,\n    ) {\n      if (node.type === \"TSDeclareMethod\") return;\n      // This happens when using the \"estree\" plugin.\n      if (\n        (node as N.Node).type === \"MethodDefinition\" &&\n        !Object.hasOwn(\n          (node as unknown as N.EstreeMethodDefinition).value,\n          \"body\",\n        )\n      ) {\n        return;\n      }\n\n      super.declareClassPrivateMethodInScope(node, kind);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      // handle `extends f<<T>\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n        node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n      }\n      if (this.eatContextual(tt._implements)) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      return super.parseObjPropValue(\n        prop,\n\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n    }\n\n    parseFunctionParams(node: N.Function, isConstructor: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (\n        decl.id.type === \"Identifier\" &&\n        !this.hasPrecedingLineBreak() &&\n        this.eat(tt.bang)\n      ) {\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(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: State | undefined | null;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\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` or `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 currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (!jsx?.error && !this.match(tt.lt)) {\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      // If the state was cloned in the JSX parsing branch above but there\n      // have been any error in the tryParse call, this.state is set to state\n      // so we still need to clone it.\n      if (!state || state === this.state) state = this.state.clone();\n\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n      // We need to explicitly annotate 'abort' for microsoft/TypeScript#58170\n      const arrow = this.tryParse((abort: () => never) => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n        const expr = super.parseMaybeAssign(\n          refExpressionErrors,\n          afterLeftParse,\n        );\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\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            this.hasPlugin(\"jsx\") &&\n            expr.typeParameters.params.length === 1 &&\n            !expr.typeParameters.extra?.trailingComma\n          ) {\n            // report error if single type parameter used without trailing comma.\n            const parameter = expr.typeParameters\n              .params[0] as N.TsTypeParameter;\n            if (!parameter.constraint) {\n              // A single type parameter must either have constraints\n              // or a trailing comma, otherwise it's ambiguous with JSX.\n              this.raise(\n                TSErrors.SingleTypeParameterWithoutTrailingComma,\n                createPositionWithColumnOffset(parameter.loc.end, 1),\n                {\n                  typeParameterName: process.env.BABEL_8_BREAKING\n                    ? (parameter.name as N.Identifier).name\n                    : (parameter.name as string),\n                },\n              );\n            }\n          }\n        }\n\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) {\n        // This error is reported outside of the this.tryParse call so that\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n        // because of this error.\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\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(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\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        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\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      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    reportReservedArrowTypeParam(node: any) {\n      if (\n        node.params.length === 1 &&\n        !node.params[0].constraint &&\n        !node.extra?.trailingComma &&\n        this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n      ) {\n        this.raise(TSErrors.ReservedArrowTypeParam, node);\n      }\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(\n      refExpressionErrors?: ExpressionErrors | null,\n      sawUnary?: boolean,\n    ): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n        return this.tsParseTypeAssertion();\n      }\n      return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n    }\n\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\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          // @ts-expect-error refine typings\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    parseFunctionParamType(param: N.Pattern) {\n      if (this.eat(tt.question)) {\n        (param as any as 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): void {\n      switch (node.type) {\n        case \"ParenthesizedExpression\":\n          this.toAssignableParenthesizedExpression(node, isLHS);\n          break;\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          if (isLHS) {\n            this.expressionScope.recordArrowParameterBindingError(\n              TSErrors.UnexpectedTypeCastInParameter,\n              node,\n            );\n          } else {\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, node);\n          }\n          this.toAssignable(node.expression, isLHS);\n          break;\n        case \"AssignmentExpression\":\n          if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n            node.left = this.typeCastToParameter(node.left) as N.Assignable;\n          }\n        /* fall through */\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(\n      node: N.ParenthesizedExpression,\n      isLHS: boolean,\n    ): void {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          this.toAssignable(node.expression, isLHS);\n          break;\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n      switch (node.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n        case \"TSNonNullExpression\":\n          this.checkToRestConversion(node.expression, false);\n          break;\n        default:\n          super.checkToRestConversion(node, allowPattern);\n      }\n    }\n\n    isValidLVal(\n      type:\n        | \"TSTypeCastExpression\"\n        | \"TSParameterProperty\"\n        | \"TSNonNullExpression\"\n        | \"TSInstantiationExpression\"\n        | \"TSAsExpression\"\n        | \"TSSatisfiesExpression\"\n        | \"TSTypeAssertion\",\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      switch (type) {\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        case \"TSTypeCastExpression\":\n          return true;\n        case \"TSParameterProperty\":\n          return \"parameter\";\n        case \"TSNonNullExpression\":\n        case \"TSInstantiationExpression\":\n          return \"expression\";\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n          return (\n            (binding !== BindingFlag.TYPE_NONE || !isUnparenthesizedInAssign) &&\n            ([\"expression\", true] as [string, boolean])\n          );\n        default:\n          return super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      if (this.state.type === tt._this) {\n        return this.parseIdentifier(/* liberal */ true);\n      }\n      return super.parseBindingAtom();\n    }\n\n    parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n      // handles `@f<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(\n            expr,\n          ) as N.CallExpression;\n          call.typeParameters = typeArguments;\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr);\n    }\n\n    checkCommaAfterRest(\n      close: (typeof charCodes)[keyof typeof charCodes],\n    ): boolean {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n        return false;\n      }\n      return super.checkCommaAfterRest(close);\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.match(tt.lt) || 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(\n      startLoc?: Position | null,\n      left?: Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(TSErrors.TypeAnnotationAfterAssign, node.typeAnnotation);\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 (this.state.inType) {\n        if (code === charCodes.greaterThan) {\n          this.finishOp(tt.gt, 1);\n          return;\n        }\n        if (code === charCodes.lessThan) {\n          this.finishOp(tt.lt, 1);\n          return;\n        }\n      }\n      super.getTokenFromCode(code);\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    toAssignableList(\n      exprList: Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TSTypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\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      // handles `<Component<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArgumentsInExpression(),\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 { isAmbientContext: oldIsAmbientContext, strict: oldStrict } =\n        this.state;\n      this.state.isAmbientContext = true;\n      this.state.strict = false;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n        this.state.strict = oldStrict;\n      }\n    }\n\n    parseClass<T extends N.Class>(\n      node: Undone<T>,\n      isStatement: boolean,\n      optionalId?: boolean,\n    ): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node as any).abstract;\n      try {\n        return super.parseClass(node, isStatement, optionalId);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n      decorators: N.Decorator[] | null,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.maybeTakeDecorators(\n          decorators,\n          this.parseClass<N.ClassDeclaration>(\n            node as N.ClassDeclaration,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          ),\n        );\n      } else if (this.isContextual(tt._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(TSErrors.NonClassMethodPropertyHasAbstractModifer, node);\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        }\n      } else {\n        this.unexpected(null, tt._class);\n      }\n    }\n\n    parseMethod<\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope?: boolean,\n    ) {\n      const method = super.parseMethod<T>(\n        node,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\n      if (method.abstract) {\n        const hasBody = this.hasPlugin(\"estree\")\n          ? // @ts-expect-error estree typings\n            !!method.value.body\n          : !!method.body;\n        if (hasBody) {\n          const { key } = method;\n          this.raise(TSErrors.AbstractMethodHasImplementation, method, {\n            methodName:\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    parseExportSpecifier(\n      node: Undone<N.ExportSpecifier>,\n      isString: boolean,\n      isInTypeExport: boolean,\n      isMaybeTypeOnly: boolean,\n    ) {\n      if (!isString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          node,\n          /* isImport */ false,\n          isInTypeExport,\n        );\n        return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n      }\n      node.exportKind = \"value\";\n      return super.parseExportSpecifier(\n        node,\n        isString,\n        isInTypeExport,\n        isMaybeTypeOnly,\n      );\n    }\n\n    parseImportSpecifier(\n      specifier: Undone<N.ImportSpecifier>,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      if (!importedIsString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          specifier,\n          /* isImport */ true,\n          isInTypeOnlyImport,\n        );\n        return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n      }\n      specifier.importKind = \"value\";\n      return super.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        isInTypeOnlyImport,\n        isMaybeTypeOnly,\n        isInTypeOnlyImport\n          ? BindingFlag.TYPE_TS_TYPE_IMPORT\n          : BindingFlag.TYPE_TS_VALUE_IMPORT,\n      );\n    }\n\n    parseTypeOnlyImportExportSpecifier(\n      node: any,\n      isImport: boolean,\n      isInTypeOnlyImportExport: boolean,\n    ): void {\n      const leftOfAsKey = isImport ? \"imported\" : \"local\";\n      const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n      let leftOfAs = node[leftOfAsKey];\n      let rightOfAs;\n\n      let hasTypeSpecifier = false;\n      let canParseAsKeyword = true;\n\n      const loc = leftOfAs.loc.start;\n\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n      // import { type } from \"mod\";          - hasTypeSpecifier: false, leftOfAs: type\n      // import { type as } from \"mod\";       - hasTypeSpecifier: true,  leftOfAs: as\n      // import { type as as } from \"mod\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n      // import { type as as as } from \"mod\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\n      if (this.isContextual(tt._as)) {\n        // { type as ...? }\n        const firstAs = this.parseIdentifier();\n        if (this.isContextual(tt._as)) {\n          // { type as as ...? }\n          const secondAs = this.parseIdentifier();\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\n            // { type as as something }\n            hasTypeSpecifier = true;\n            leftOfAs = firstAs;\n            rightOfAs = isImport\n              ? this.parseIdentifier()\n              : this.parseModuleExportName();\n            canParseAsKeyword = false;\n          } else {\n            // { type as as }\n            rightOfAs = secondAs;\n            canParseAsKeyword = false;\n          }\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          // { type as something }\n          canParseAsKeyword = false;\n          rightOfAs = isImport\n            ? this.parseIdentifier()\n            : this.parseModuleExportName();\n        } else {\n          // { type as }\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        // { type something ...? }\n        hasTypeSpecifier = true;\n        if (isImport) {\n          leftOfAs = this.parseIdentifier(true);\n          if (!this.isContextual(tt._as)) {\n            this.checkReservedWord(\n              leftOfAs.name,\n              leftOfAs.loc.start,\n              true,\n              true,\n            );\n          }\n        } else {\n          leftOfAs = this.parseModuleExportName();\n        }\n      }\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n        this.raise(\n          isImport\n            ? TSErrors.TypeModifierIsUsedInTypeImports\n            : TSErrors.TypeModifierIsUsedInTypeExports,\n          loc,\n        );\n      }\n\n      node[leftOfAsKey] = leftOfAs;\n      node[rightOfAsKey] = rightOfAs;\n\n      const kindKey = isImport ? \"importKind\" : \"exportKind\";\n      node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\n        node[rightOfAsKey] = isImport\n          ? this.parseIdentifier()\n          : this.parseModuleExportName();\n      }\n      if (!node[rightOfAsKey]) {\n        node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\n      }\n      if (isImport) {\n        this.checkIdentifier(\n          node[rightOfAsKey],\n          hasTypeSpecifier\n            ? BindingFlag.TYPE_TS_TYPE_IMPORT\n            : BindingFlag.TYPE_TS_VALUE_IMPORT,\n        );\n      }\n    }\n  };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n  if (expression.type !== \"MemberExpression\") return false;\n\n  const { computed, property } = expression;\n\n  if (\n    computed &&\n    property.type !== \"StringLiteral\" &&\n    (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n  ) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n\n// If a const declaration has no type annotation and is initialized to\n// a string literal, numeric literal, or enum reference, then it is\n// allowed. In an ideal world, we'd check whether init was *actually* an\n// enum reference, but we allow anything that \"could be\" a literal enum\n// in `isPossiblyLiteralEnum` since we don't have all the information\n// that the typescript compiler has.\nfunction isValidAmbientConstInitializer(\n  expression: N.Expression,\n  estree: boolean,\n): boolean {\n  const { type } = expression;\n  if (expression.extra?.parenthesized) {\n    return false;\n  }\n  if (estree) {\n    if (type === \"Literal\") {\n      const { value } = expression;\n      if (typeof value === \"string\" || typeof value === \"boolean\") {\n        return true;\n      }\n    }\n  } else {\n    if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n      return true;\n    }\n  }\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n    return true;\n  }\n  if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n    return true;\n  }\n  if (isPossiblyLiteralEnum(expression)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\n  if (estree) {\n    return (\n      expression.type === \"Literal\" &&\n      (typeof expression.value === \"number\" || \"bigint\" in expression)\n    );\n  }\n  return (\n    expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\"\n  );\n}\n\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\n  if (expression.type === \"UnaryExpression\") {\n    const { operator, argument } = expression;\n    if (operator === \"-\" && isNumber(argument, estree)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\" || expression.computed) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n", "import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport { ParseErrorEnum } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { Position } from \"../util/location.ts\";\n\ntype PossiblePlaceholders = {\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};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there  is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\nexport default (superClass: typeof Parser) =>\n  class PlaceholdersParserMixin extends superClass implements Parser {\n    parsePlaceholder<T extends PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode<N.Placeholder<T>>();\n        this.next();\n        this.assertNoSpace();\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();\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T extends PlaceholderTypes>(\n      node: Undone<N.Placeholder> | Undone<NodeOf<PlaceholderTypes>>,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      let placeholder = node as unknown as N.Placeholder<T>;\n\n      if (!placeholder.expectedNode || !placeholder.type) {\n        placeholder = this.finishNode(\n          placeholder,\n          \"Placeholder\",\n        ) as unknown as N.Placeholder<T>;\n      }\n\n      placeholder.expectedNode = expectedNode;\n      return placeholder as unknown as MaybePlaceholder<T>;\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        this.finishOp(tt.placeholder, 2);\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(\n      refExpressionErrors?: ExpressionErrors | null,\n    ): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") ||\n        super.parseExprAtom(refExpressionErrors)\n      );\n    }\n\n    parseIdentifier(liberal?: boolean): 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\") || super.parseIdentifier(liberal)\n      );\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ) {\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) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/lval.js                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean): void {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/statement.js                                          *\n     * ============================================================ */\n\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\n      if (super.chStartsBindingIdentifier(ch, pos)) {\n        return true;\n      }\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(\n      node: N.BreakStatement | N.ContinueStatement,\n      isBreak: boolean,\n    ) {\n      // @ts-expect-error: node.label could be Placeholder\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(node, isBreak);\n    }\n\n    // @ts-expect-error Plugin will override parser interface\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: MaybePlaceholder<\"Expression\">,\n    ): MaybePlaceholder<\"Statement\"> {\n      // @ts-expect-error placeholder typings\n      if (expr.type !== \"Placeholder\" || expr.extra?.parenthesized) {\n        // @ts-expect-error placeholder typings\n        return super.parseExpressionStatement(node, expr);\n      }\n\n      if (this.match(tt.colon)) {\n        // @ts-expect-error placeholder typings\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n      const stmtPlaceholder = node as unknown as N.Placeholder<\"Statement\">;\n      stmtPlaceholder.name = (expr as N.Placeholder).name;\n      return this.finishPlaceholder(stmtPlaceholder, \"Statement\");\n    }\n\n    parseBlock(\n      allowDirectives?: boolean,\n      createNewLexicalScope?: boolean,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(\n          allowDirectives,\n          createNewLexicalScope,\n          afterBlockParse,\n        )\n      );\n    }\n\n    parseFunctionId(\n      requireId?: boolean,\n    ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n      );\n    }\n    // @ts-expect-error Plugin will override parser interface\n    parseClass<T extends 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      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          throw this.raise(\n            PlaceholderErrors.ClassNameIsRequired,\n            this.state.startLoc,\n          );\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      super.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        super.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(node, decorators);\n\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node2.specifiers = [];\n        node2.source = null;\n        node2.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node2, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode<N.ExportDefaultSpecifier>();\n      specifier.exported = placeholder;\n      node2.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node2, decorators);\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              tokenLabelName(tt.placeholder),\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      maybeDefaultIdentifier: N.Identifier | null,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      if ((node as N.ExportNamedDeclaration).specifiers?.length) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(\n        node,\n        maybeDefaultIdentifier,\n      );\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          // @ts-expect-error placeholder typings\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration>,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(node);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(tt._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 =\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n      specifier.local = placeholder;\n      node.specifiers.push(\n        this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n      );\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(tt._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\") || super.parseImportSource()\n      );\n    }\n\n    // Throws if the current token and the prev one are separated by a space.\n    assertNoSpace(): void {\n      if (this.state.start > this.state.lastTokEndLoc.index) {\n        this.raise(PlaceholderErrors.UnexpectedSpace, this.state.lastTokEndLoc);\n      }\n    }\n  };\n", "import type Parser from \"../parser/index.ts\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nexport default (superClass: typeof Parser) =>\n  class V8IntrinsicMixin extends superClass implements Parser {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStartLoc = this.state.startLoc;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode<N.Identifier>();\n        this.next(); // eat '%'\n        if (tokenIsIdentifier(this.state.type)) {\n          const name = this.parseIdentifierName();\n          const identifier = this.createIdentifier(node, name);\n          // @ts-expect-error: avoid mutating AST types\n          identifier.type = \"V8IntrinsicIdentifier\";\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStartLoc);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      return (\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n      );\n    }\n  };\n", "import type Parser from \"./parser/index.ts\";\nimport type { PluginConfig } from \"./typings.ts\";\n\nexport type Plugin = PluginConfig;\n\nexport type PluginList = PluginConfig[];\n\nexport type MixinPlugin = (\n  superClass: new (...args: any) => Parser,\n) => new (...args: any) => Parser;\n\nconst PIPELINE_PROPOSALS = process.env.BABEL_8_BREAKING\n  ? [\"fsharp\", \"hack\"]\n  : [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\n\nexport function validatePlugins(pluginsMap: Map<string, any>) {\n  if (pluginsMap.has(\"decorators\")) {\n    if (pluginsMap.has(\"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport =\n      pluginsMap.get(\"decorators\").decoratorsBeforeExport;\n    if (\n      decoratorsBeforeExport != null &&\n      typeof decoratorsBeforeExport !== \"boolean\"\n    ) {\n      throw new Error(\n        \"'decoratorsBeforeExport' must be a boolean, if specified.\",\n      );\n    }\n\n    const allowCallParenthesized =\n      pluginsMap.get(\"decorators\").allowCallParenthesized;\n    if (\n      allowCallParenthesized != null &&\n      typeof allowCallParenthesized !== \"boolean\"\n    ) {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n\n  if (pluginsMap.has(\"flow\") && pluginsMap.has(\"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (pluginsMap.has(\"placeholders\") && pluginsMap.has(\"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (pluginsMap.has(\"pipelineOperator\")) {\n    const proposal = pluginsMap.get(\"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 = process.env.BABEL_8_BREAKING\n      ? pluginsMap.has(\"recordAndTuple\")\n      : pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\";\n\n    if (proposal === \"hack\") {\n      if (pluginsMap.has(\"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (pluginsMap.has(\"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = pluginsMap.get(\"pipelineOperator\").topicToken;\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 \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n        );\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error(\n        `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"smart\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n      );\n    }\n  }\n\n  if (pluginsMap.has(\"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please use `importAttributes` parser plugin, or `@babel/plugin-syntax-import-attributes`.\",\n      );\n    } else {\n      if (\n        pluginsMap.has(\"importAttributes\") ||\n        pluginsMap.has(\"importAssertions\")\n      ) {\n        throw new Error(\n          \"Cannot combine importAssertions, importAttributes and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVersionPluginOption =\n        pluginsMap.get(\"moduleAttributes\").version;\n      if (moduleAttributesVersionPluginOption !== \"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 (pluginsMap.has(\"importAssertions\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`importAssertions` has been removed in Babel 8, please use `importAttributes` parser plugin, or `@babel/plugin-syntax-import-attributes`.\" +\n          \" To use the non-standard `assert` syntax you can enable the `deprecatedAssertSyntax: true` option of those plugins.\",\n      );\n    } else if (pluginsMap.has(\"importAttributes\")) {\n      throw new Error(\n        \"Cannot combine importAssertions and importAttributes plugins.\",\n      );\n    }\n  }\n\n  if (pluginsMap.has(\"recordAndTuple\")) {\n    const syntaxType = pluginsMap.get(\"recordAndTuple\").syntaxType;\n    if (syntaxType != null) {\n      if (process.env.BABEL_8_BREAKING) {\n        if (syntaxType === \"hash\") {\n          throw new Error(\n            'The syntaxType option is no longer required in Babel 8. You can safely remove { syntaxType: \"hash\" } from the recordAndTuple config.',\n          );\n        } else {\n          throw new Error(\n            'The syntaxType option is no longer required in Babel 8. Please remove { syntaxType: \"bar\" } from the recordAndTuple config and migrate to the hash syntax #{} and #[].',\n          );\n        }\n      } else {\n        const RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n        if (!RECORD_AND_TUPLE_SYNTAX_TYPES.includes(syntaxType)) {\n          throw new Error(\n            \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n              RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n          );\n        }\n      }\n    }\n  }\n\n  if (\n    pluginsMap.has(\"asyncDoExpressions\") &&\n    !pluginsMap.has(\"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // @ts-expect-error so @babel/core can provide better error message\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n\n  if (\n    pluginsMap.has(\"optionalChainingAssign\") &&\n    pluginsMap.get(\"optionalChainingAssign\").version !== \"2023-07\"\n  ) {\n    throw new Error(\n      \"The 'optionalChainingAssign' plugin requires a 'version' option,\" +\n        \" representing the last proposal update. Currently, the\" +\n        \" only supported value is '2023-07'.\",\n    );\n  }\n\n  if (process.env.BABEL_8_BREAKING) {\n    if (pluginsMap.has(\"decimal\")) {\n      throw new Error(\n        \"The 'decimal' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    }\n    if (pluginsMap.has(\"importReflection\")) {\n      throw new Error(\n        \"The 'importReflection' plugin has been removed in Babel 8. Use 'sourcePhaseImports' instead, and \" +\n          \"replace 'import module' with 'import source' in your code.\",\n      );\n    }\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree.ts\";\nimport flow from \"./plugins/flow/index.ts\";\nimport jsx from \"./plugins/jsx/index.ts\";\nimport typescript from \"./plugins/typescript/index.ts\";\nimport placeholders from \"./plugins/placeholders.ts\";\nimport v8intrinsic from \"./plugins/v8intrinsic.ts\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n  \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n", "import type { PluginList } from \"./plugin-utils.ts\";\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 interface Options {\n  sourceType?: SourceType;\n  sourceFilename?: string;\n  startColumn?: number;\n  startLine?: number;\n  allowAwaitOutsideFunction?: boolean;\n  allowReturnOutsideFunction?: boolean;\n  allowNewTargetOutsideFunction?: boolean;\n  allowImportExportEverywhere?: boolean;\n  allowSuperOutsideMethod?: boolean;\n  allowUndeclaredExports?: boolean;\n  plugins?: PluginList;\n  strictMode?: boolean | undefined | null;\n  ranges?: boolean;\n  tokens?: boolean;\n  createImportExpressions?: boolean;\n  createParenthesizedExpressions?: boolean;\n  errorRecovery?: boolean;\n  attachComment?: boolean;\n  annexB?: boolean;\n}\n\ntype OptionsWithDefaults = { [P in keyof Options]-?: Options[P] };\n\nexport const defaultOptions: OptionsWithDefaults = {\n  // Source type (\"script\" or \"module\") for different semantics\n  sourceType: \"script\",\n  // Source filename.\n  sourceFilename: undefined,\n  // Column (0-based) from which to start counting source. Useful for\n  // integration with other tools.\n  startColumn: 0,\n  // Line (1-based) 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, new.target outside a function or class is not\n  // considered an error.\n  allowNewTargetOutsideFunction: 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 ImportExpression AST nodes (if false\n  // `import(foo)` will be parsed as CallExpression(Import, [Identifier(foo)])\n  createImportExpressions: process.env.BABEL_8_BREAKING ? true : 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  // When enabled, the parser will support Annex B syntax.\n  // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n  annexB: true,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): OptionsWithDefaults {\n  if (opts == null) {\n    return { ...defaultOptions };\n  }\n  if (opts.annexB != null && opts.annexB !== false) {\n    throw new Error(\"The `annexB` option can only be set to `false`.\");\n  }\n\n  const options: any = {};\n  for (const key of Object.keys(defaultOptions) as (keyof Options)[]) {\n    options[key] = opts[key] ?? defaultOptions[key];\n  }\n  return options;\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 — 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 {\n  tokenCanStartExpression,\n  tokenIsAssignment,\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsOperator,\n  tokenIsPostfix,\n  tokenIsPrefix,\n  tokenIsRightAssociative,\n  tokenIsTemplate,\n  tokenKeywordOrIdentifierIsKeyword,\n  tokenLabelName,\n  tokenOperatorPrecedence,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport LValParser from \"./lval.ts\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier.ts\";\nimport {\n  type Position,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport * as charCodes from \"charcodes\";\nimport { ScopeFlag, BindingFlag } from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope.ts\";\nimport { Errors, type ParseError } from \"../parse-error.ts\";\nimport {\n  UnparenthesizedPipeBodyDescriptions,\n  type UnparenthesizedPipeBodyTypes,\n} from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport { cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type { SourceType } from \"../options.ts\";\n\nexport default abstract class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  abstract parseBlock(\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement;\n  abstract parseClass(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ): N.Class;\n  abstract parseDecorators(allowExport?: boolean): void;\n  abstract parseFunction<T extends N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ): T;\n  abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\n  abstract parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: N.Directive[] | null | undefined,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void;\n  abstract parseProgram(\n    program: N.Program,\n    end: TokenType,\n    sourceType?: SourceType,\n  ): N.Program;\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 | undefined | null,\n    protoRef: {\n      used: boolean;\n    },\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return;\n    }\n\n    const key = prop.key as\n      | N.Identifier\n      | N.StringLiteral\n      | N.NumericLiteral\n      | N.BigIntLiteral;\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(Errors.RecordNoProto, key);\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.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, key);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(\n    expr: N.Expression | N.PrivateName,\n    potentialArrowAt: number,\n  ): expr is N.ArrowFunctionExpression {\n    return (\n      expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression() as N.Expression & N.ParserOutput;\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.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    this: Parser,\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(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt<N.SequenceExpression>(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    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\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    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\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?: ParseError<any>,\n  ) {\n    refExpressionErrors.optionalParametersLoc =\n      resultError?.loc ?? this.state.startLoc;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    if (this.isContextual(tt._yield)) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, 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    const { type } = this.state;\n\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        this.toAssignable(left, /* isLHS */ true);\n        node.left = left;\n\n        const startIndex = startLoc.index;\n        if (\n          refExpressionErrors.doubleProtoLoc != null &&\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\n        ) {\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n        }\n        if (\n          refExpressionErrors.shorthandAssignLoc != null &&\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\n        ) {\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n        }\n        if (\n          refExpressionErrors.privateKeyLoc != null &&\n          refExpressionErrors.privateKeyLoc.index >= startIndex\n        ) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n        }\n      } else {\n        node.left = left as unknown as N.Assignable; // checked a few lines further down\n      }\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(left, this.finishNode(node, \"AssignmentExpression\"));\n      // @ts-expect-error todo(flow->ts) improve node types\n      return node;\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    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\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, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt<N.ConditionalExpression>(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  parseMaybeUnaryOrPrivate(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression | N.PrivateName {\n    return this.match(tt.privateName)\n      ? this.parsePrivateName()\n      : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, 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    this: Parser,\n    left: N.Expression | N.PrivateName,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    if (this.isPrivateName(left)) {\n      // https://tc39.es/ecma262/#prod-RelationalExpression\n      // RelationalExpression [In, Yield, Await]\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n      const value = this.getPrivateNameSV(left);\n\n      if (\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\n        !this.prodParam.hasIn ||\n        !this.match(tt._in)\n      ) {\n        this.raise(Errors.PrivateInExpectedIn, left, {\n          identifierName: value,\n        });\n      }\n\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            // PrivateName must be followed by `in`, but we have `|>`\n            return left as N.Expression;\n          }\n          this.checkPipelineAtInfixOperator(left as N.Expression, leftStartLoc);\n        }\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n          leftStartLoc,\n        );\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 = tokenOperatorPrecedence(tt.logicalAND);\n        }\n\n        this.next();\n\n        if (\n          op === tt.pipeline &&\n          // @ts-expect-error Remove this in Babel 8\n          this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n        ) {\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\n            throw this.raise(\n              Errors.UnexpectedAwaitAfterPipelineBody,\n              this.state.startLoc,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = 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(\n            Errors.MixingCoalesceWithLogical,\n            this.state.startLoc,\n          );\n        }\n\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    // PrivateName is followed by `in` and handled by the previous if statement\n    return left as N.Expression;\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(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\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              return this.parseHackPipeBody();\n            });\n\n          // @ts-expect-error Remove this in Babel 8\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n                throw this.raise(Errors.PipeBodyIsTighter, this.state.startLoc);\n              }\n              return this.parseSmartPipelineBodyInStyle(\n                this.parseExprOpBaseRightExpr(op, prec),\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(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\n    );\n  }\n\n  parseHackPipeBody(this: Parser): N.Expression {\n    const { startLoc } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n      body.type,\n    );\n\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\n    if (requiredParentheses && !body.extra?.parenthesized) {\n      this.raise(Errors.PipeUnparenthesizedBody, startLoc, {\n        type: body.type as UnparenthesizedPipeBodyTypes,\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(Errors.PipeTopicUnused, startLoc);\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\n  ) {\n    if (this.match(tt.exponent)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, node.argument);\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(tt._await);\n\n    if (isAwait && this.recordAwaitIfAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n    if (tokenIsPrefix(this.state.type)) {\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(Errors.StrictDelete, node);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, node);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(\n      // @ts-expect-error using \"Undone\" node as \"done\"\n      node,\n      update,\n      refExpressionErrors,\n    );\n\n    if (isAwait) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, startLoc);\n        return this.parseAwait(startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    this: Parser,\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (update) {\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\n      this.checkLVal(\n        updateExpressionNode.argument,\n        this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n      );\n      return node;\n    }\n\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, (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(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\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, startLoc);\n  }\n\n  parseSubscripts(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls?: boolean | null,\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, 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    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const { type } = this.state;\n    if (!noCalls && type === tt.doubleColon) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (type === tt.questionDot) {\n      if (noCalls) {\n        this.raise(Errors.OptionalChainingNoNew, this.state.startLoc);\n        if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\n          // stop at `?.` when parsing `new a?.()`\n          state.stop = true;\n          return base;\n        }\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        startLoc,\n        state,\n        optional,\n      );\n    } else {\n      const computed = this.eat(tt.bracketL);\n      if (computed || optional || this.eat(tt.dot)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        state.stop = true;\n        return base;\n      }\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    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    computed: boolean,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt<\n      N.OptionalMemberExpression | N.MemberExpression\n    >(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(tt.bracketR);\n    } else if (this.match(tt.privateName)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, startLoc);\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n\n    if (state.optionalChainMember) {\n      (node as N.OptionalMemberExpression).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    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt<N.BindExpression>(startLoc);\n    node.object = base;\n    this.next(); // eat '::'\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\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    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors: ExpressionErrors | null = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n      startLoc,\n    );\n    node.callee = base;\n    const { maybeAsyncArrow, optionalChainMember } = state;\n\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (optionalChainMember) {\n      // @ts-expect-error when optionalChainMember is true, node must be an optional call\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        // @ts-expect-error todo(flow->ts)\n        node,\n        refExpressionErrors,\n      );\n    }\n    let finishedNode:\n      | N.CallExpression\n      | N.OptionalCallExpression\n      | N.ArrowFunctionExpression = this.finishCallExpression(\n      node,\n      optionalChainMember,\n    );\n\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      /*:: invariant(refExpressionErrors != null) */\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n        finishedNode as N.CallExpression,\n      );\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return finishedNode;\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    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, startLoc);\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.lastTokEndLoc.index === 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 extends N.CallExpression | N.OptionalCallExpression>(\n    node: Undone<T>,\n    optional: boolean,\n  ): T {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        if (\n          process.env.BABEL_8_BREAKING ||\n          !(\n            this.hasPlugin(\"moduleAttributes\") ||\n            this.hasPlugin(\"importAssertions\")\n          )\n        ) {\n          this.expectPlugin(\"importAttributes\");\n        }\n      }\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, node, {\n          maxArgumentCount:\n            this.hasPlugin(\"importAttributes\") ||\n            (!process.env.BABEL_8_BREAKING &&\n              (this.hasPlugin(\"importAssertions\") ||\n                this.hasPlugin(\"moduleAttributes\")))\n              ? 2\n              : 1,\n        });\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, arg);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    this: Parser,\n    close: TokenType,\n    dynamicImport?: boolean,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: N.Node | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression | undefined | null> {\n    const elts: N.Expression[] = [];\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(\"importAttributes\") &&\n            (process.env.BABEL_8_BREAKING ||\n              (!this.hasPlugin(\"importAssertions\") &&\n                !this.hasPlugin(\"moduleAttributes\")))\n          ) {\n            this.raise(\n              Errors.ImportCallArgumentTrailingComma,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\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    this: Parser,\n    node: Undone<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?.trailingCommaLoc,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    // mark trailing comments of `async` to be inner comments\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node as N.ArrowFunctionExpression;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(this: Parser): N.Expression {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n  }\n\n  // Parse an atomic expression — 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(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    let node;\n    let decorators: N.Decorator[] | null = null;\n\n    const { type } = this.state;\n    switch (type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode<N.MetaProperty | N.Import | N.ImportExpression>();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaProperty(node as Undone<N.MetaProperty>);\n        }\n\n        if (this.match(tt.parenL)) {\n          if (this.options.createImportExpressions) {\n            return this.parseImportCall(node as Undone<N.ImportExpression>);\n          } else {\n            return this.finishNode(node, \"Import\");\n          }\n        } else {\n          this.raise(Errors.UnsupportedImport, this.state.lastTokStartLoc);\n          return this.finishNode(node, \"Import\");\n        }\n\n      case tt._this:\n        node = this.startNode<N.ThisExpression>();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\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.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        );\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        );\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        decorators = this.parseDecorators();\n      // fall through\n      case tt._class:\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            this.startNode<N.ClassExpression>(),\n          ),\n          false,\n        );\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.templateNonTail:\n      case tt.templateTail:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode<N.BindExpression>();\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(Errors.UnsupportedBind, callee);\n        }\n      }\n\n      case tt.privateName: {\n        // Standalone private names are only allowed in \"#x in obj\"\n        // expressions, and they are directly handled by callers of\n        // parseExprOp. If we reach this, the input is always invalid.\n        // We can throw a better error message and recover, rather than\n        // just throwing \"Unexpected token\" (which is the default\n        // behavior of this big switch statement).\n        this.raise(Errors.PrivateInExpectedIn, this.state.startLoc, {\n          identifierName: this.state.value,\n        });\n        return this.parsePrivateName() as unknown as N.Expression;\n      }\n\n      case tt.moduloAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n      }\n\n      case tt.xorAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n      }\n\n      case tt.doubleCaret:\n      case tt.doubleAt: {\n        return this.parseTopicReference(\"hack\");\n      }\n\n      case tt.bitwiseXOR:\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          return this.parseTopicReference(pipeProposal);\n        }\n        this.unexpected();\n        break;\n      }\n\n      case tt.lt: {\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        } else {\n          this.unexpected();\n        }\n        break;\n      }\n\n      default:\n        if (!process.env.BABEL_8_BREAKING && type === tt.decimal) {\n          return this.parseDecimalLiteral(this.state.value);\n        }\n\n        if (tokenIsIdentifier(type)) {\n          if (\n            this.isContextual(tt._module) &&\n            this.lookaheadInLineCharCode() === charCodes.leftCurlyBrace\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 (\n            !containsEsc &&\n            id.name === \"async\" &&\n            !this.canInsertSemicolon()\n          ) {\n            const { type } = this.state;\n            if (type === tt._function) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(\n                this.startNodeAtNode(id),\n              );\n            } else if (tokenIsIdentifier(type)) {\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 (type === tt._do) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (\n            canBeArrow &&\n            this.match(tt.arrow) &&\n            !this.canInsertSemicolon()\n          ) {\n            this.next();\n            return this.parseArrowExpression(\n              this.startNodeAtNode(id),\n              [id],\n              false,\n            );\n          }\n\n          return id;\n        } else {\n          this.unexpected();\n        }\n    }\n  }\n\n  // This helper method should only be called\n  // when the parser has reached a potential Hack pipe topic token\n  // that is followed by an equals sign.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  // If we find ^= or %= in an expression position\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n  // reparse the current token as ^ or %.\n  // Otherwise, this throws an unexpected-token error.\n  parseTopicReferenceThenEqualsSign(\n    topicTokenType: TokenType,\n    topicTokenValue: string,\n  ): N.Expression {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      // Set the most-recent token to be a topic token\n      // given by the tokenType and tokenValue.\n      // Now the next readToken() call (in parseTopicReference)\n      // will consume that “topic token”.\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      // Rewind the tokenizer to the end of the “topic token”, so that the\n      // following token starts at the equals sign after that topic token.\n      this.state.pos--;\n      this.state.end--;\n      // This is safe to do since the preceding character was either ^ or %, and\n      // thus not a newline.\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      // Now actually consume the topic token.\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // This helper method should only be called\n  // when the proposal-pipeline-operator plugin is active,\n  // and when the parser has reached a potential Hack pipe topic token.\n  // Although a pipe-operator proposal is assumed to be active,\n  // its configuration might not match the current token’s type.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  parseTopicReference(pipeProposal: string): N.Expression {\n    const node = this.startNode<N.TopicReference>();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n\n    // Consume the current token.\n    this.next();\n\n    // If the pipe-operator plugin’s configuration matches the current token’s 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(node, startLoc, pipeProposal, tokenType);\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’s 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’s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference<\n    T extends N.PipelinePrimaryTopicReference | N.TopicReference,\n  >(\n    node: Undone<T>,\n    startLoc: Position,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): T {\n    if (\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n    ) {\n      // The token matches the plugin’s 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      const nodeType =\n        pipeProposal === \"smart\"\n          ? \"PipelinePrimaryTopicReference\"\n          : // The proposal must otherwise be \"hack\",\n            // as enforced by testTopicReferenceConfiguration.\n            \"TopicReference\";\n\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        this.raise(\n          // The topic reference is not allowed in the current context:\n          // it is outside of a pipe body.\n          // Raise recoverable errors.\n          pipeProposal === \"smart\"\n            ? Errors.PrimaryTopicNotAllowed\n            : // In this case, `pipeProposal === \"hack\"` is true.\n              Errors.PipeTopicUnbound,\n          startLoc,\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’s configuration.\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, startLoc, {\n        token: tokenLabelName(tokenType),\n      });\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser plugin’s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configuration’s `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    startLoc: Position,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        return this.hasPlugin([\n          \"pipelineOperator\",\n          {\n            // @ts-expect-error token must have a label\n            topicToken: tokenLabelName(tokenType),\n          },\n        ]);\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, startLoc);\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n  ): 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(Errors.LineTerminatorBeforeArrow, this.state.curPosition());\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    return this.parseArrowExpression(node, params, true);\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(\n    this: Parser,\n    node: Undone<N.DoExpression>,\n    isAsync: boolean,\n  ): 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(ParamKind.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.Super>();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.SuperNotAllowed, node);\n    } else if (\n      !this.scope.allowSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.UnexpectedSuper, node);\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(Errors.UnsupportedSuper, node);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode<N.PrivateName>();\n    const id = this.startNodeAt<N.Identifier>(\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      createPositionWithColumnOffset(this.state.startLoc, 1),\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    this: Parser,\n  ): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\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<N.Identifier>(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.match(tt._sent)) {\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      return this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"sent\",\n      );\n    }\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\n  }\n\n  parseMetaProperty(\n    node: Undone<N.MetaProperty>,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\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(Errors.UnsupportedMetaProperty, node.property, {\n        target: meta.name,\n        onlyValidPropertyName: propertyName,\n      });\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  parseImportMetaProperty(\n    this: Parser,\n    node: Undone<N.MetaProperty | N.ImportExpression>,\n  ): N.MetaProperty | N.ImportExpression {\n    const id = this.createIdentifier(\n      this.startNodeAtNode<N.Identifier>(node),\n      \"import\",\n    );\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._meta)) {\n      if (!this.inModule) {\n        this.raise(Errors.ImportMetaOutsideModule, id);\n      }\n      this.sawUnambiguousESM = true;\n    } else if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n      const isSource = this.isContextual(tt._source);\n\n      // TODO: The proposal doesn't mention import.defer yet because it was\n      // pending on a decision for import.source. Wait to enable it until it's\n      // included in the proposal.\n      if (!isSource) this.unexpected();\n\n      this.expectPlugin(\n        isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\n      );\n      if (!this.options.createImportExpressions) {\n        throw this.raise(\n          Errors.DynamicImportPhaseRequiresImportExpressions,\n          this.state.startLoc,\n          {\n            phase: this.state.value,\n          },\n        );\n      }\n      this.next();\n      (node as Undone<N.ImportExpression>).phase = isSource\n        ? \"source\"\n        : \"defer\";\n      return this.parseImportCall(node as Undone<N.ImportExpression>);\n    }\n\n    return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n  }\n\n  parseLiteralAtNode<T extends N.Node>(\n    value: any,\n    type: 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 extends N.Node>(value: any, type: 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  // TODO: Remove this in Babel 8\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: {\n    value: any;\n    pattern: string;\n    flags: N.RegExpLiteral[\"flags\"];\n  }) {\n    const node = this.startNode<N.RegExpLiteral>();\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    this.next();\n    return this.finishNode(node, \"RegExpLiteral\");\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode<N.BooleanLiteral>();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode<N.NullLiteral>();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(\n    this: Parser,\n    canBeArrow: boolean,\n  ): N.Expression {\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 innerStartLoc = this.state.startLoc;\n    const exprList: (N.Expression | N.RestElement)[] = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParametersLoc === null\n            ? null\n            : refExpressionErrors.optionalParametersLoc,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n        );\n\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n          break;\n        }\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowIn(\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\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<N.ArrowFunctionExpression>(startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      // @ts-expect-error todo(flow->ts) improve node types\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n      val.expressions = exprList as N.Expression[];\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    return this.wrapParenthesis(\n      startLoc,\n      // @ts-expect-error todo(flow->ts)\n      val,\n    );\n  }\n\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n\n      this.takeSurroundingComments(\n        expression,\n        startLoc.index,\n        this.state.lastTokEndLoc.index,\n      );\n\n      return expression;\n    }\n\n    const parenExpression =\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(\n    node: Undone<N.ArrowFunctionExpression>,\n  ): Undone<N.ArrowFunctionExpression> | undefined {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n    node: T,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    startLoc: Position,\n  ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n    return node;\n  }\n\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"new\",\n      );\n      this.next();\n      const metaProp = this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"target\",\n      );\n\n      if (\n        !this.scope.inNonArrowFunction &&\n        !this.scope.inClass &&\n        !this.options.allowNewTargetOutsideFunction\n      ) {\n        this.raise(Errors.UnexpectedNewTarget, metaProp);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node as Undone<N.NewExpression>);\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 — 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(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n    this.parseNewCallee(node);\n\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n    const isImport = this.match(tt._import);\n    const callee = this.parseNoCallExpr();\n    node.callee = callee;\n    if (\n      isImport &&\n      (callee.type === \"Import\" || callee.type === \"ImportExpression\")\n    ) {\n      this.raise(Errors.ImportCallNotNewExpression, callee);\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const { start, startLoc, end, value } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt<N.TemplateElement>(\n      createPositionWithColumnOffset(startLoc, 1),\n    );\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(\n          Errors.InvalidEscapeSequenceTemplate,\n          // FIXME: Adding 1 is probably wrong.\n          createPositionWithColumnOffset(\n            this.state.firstInvalidTemplateEscapePos,\n            1,\n          ),\n        );\n      }\n    }\n\n    const isTail = this.match(tt.templateTail);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset),\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(\n      finishedNode,\n      createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\n    );\n    return finishedNode;\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode<N.TemplateLiteral>();\n    let curElt = this.parseTemplateElement(isTagged);\n    const quasis = [curElt];\n    const substitutions = [];\n    while (!curElt.tail) {\n      substitutions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    // Type cast from (N.Expression[] | N.TsType[]). parseTemplateSubstitution\n    // returns consistent results.\n    node.expressions = substitutions as N.Expression[] | N.TsType[];\n    node.quasis = quasis;\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(this: Parser): N.Expression | N.TsType {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike(\n    close: TokenType,\n    isPattern: true,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectPattern;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: false | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectExpression;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: true,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.RecordExpression;\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n    this: Parser,\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\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.ObjectExpression | N.ObjectPattern | N.RecordExpression\n    >();\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.addTrailingCommaExtraToNode(\n            // @ts-expect-error todo(flow->ts) improve node types\n            node,\n          );\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\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(Errors.InvalidRecordProperty, prop);\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        // @ts-expect-error shorthand may not index prop\n        if (prop.shorthand) {\n          this.addExtra(prop, \"shorthand\", true);\n        }\n      }\n\n      // @ts-expect-error Fixme: refine typings\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    // @ts-expect-error type is well defined\n    return this.finishNode(node, type);\n  }\n\n  addTrailingCommaExtraToNode(node: N.Node): void {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStartLoc.index);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(\n    prop: Undone<N.ObjectProperty>,\n  ): prop is typeof prop & { key: N.Identifier } {\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    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMember | N.SpreadElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, this.state.startLoc);\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.ObjectProperty>();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\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 (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(tt.star);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    this.parsePropertyName(prop, refExpressionErrors);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const { key } = prop;\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);\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(Errors.AccessorIsGenerator, this.state.curPosition(), {\n            kind: keyName,\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      isGenerator,\n      isAsync,\n      false /* isPattern */,\n      isAccessor,\n      refExpressionErrors,\n    );\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    if (params.length !== paramCount) {\n      this.raise(\n        method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n        method,\n      );\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(Errors.BadSetterRestParameter, method);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    this: Parser,\n    prop: Undone<N.ObjectMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): N.ObjectMethod | undefined | null {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      const finishedProp = 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(finishedProp);\n      return finishedProp;\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    this: Parser,\n    prop: Undone<N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isPattern: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectProperty | undefined | null {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(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      //   CoverInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n        }\n        prop.value = this.parseMaybeDefault(\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<T extends N.ObjectMember>(\n    this: Parser,\n    prop: Undone<T>,\n    startLoc: Position | undefined | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    const node = (this.parseObjectMethod(\n      prop as Undone<N.ObjectMethod>,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n    ) ||\n      this.parseObjectProperty(\n        prop as Undone<N.ObjectProperty>,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      )) as T;\n\n    if (!node) this.unexpected();\n\n    return node;\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyName\n  // when refExpressionErrors presents, it will parse private name\n  // and record the position of the first private name\n  parsePropertyName(\n    this: Parser,\n    prop:\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\n      | N.TsNamedTypeElementBase,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (this.eat(tt.bracketL)) {\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      // We check if it's valid for it to be a private name when we push it.\n      const { type, value } = this.state;\n      let key;\n      // most un-computed property names are identifiers\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case tt.num:\n            key = this.parseNumericLiteral(value);\n            break;\n          case tt.string:\n            key = this.parseStringLiteral(value);\n            break;\n          case tt.bigint:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case tt.privateName: {\n            // the class private key has been handled in parseClassElementName\n            const privateKeyLoc = this.state.startLoc;\n            if (refExpressionErrors != null) {\n              if (refExpressionErrors.privateKeyLoc === null) {\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\n              }\n            } else {\n              this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n            }\n            key = this.parsePrivateName();\n            break;\n          }\n          default:\n            if (!process.env.BABEL_8_BREAKING && type === tt.decimal) {\n              key = this.parseDecimalLiteral(value);\n              break;\n            }\n\n            this.unexpected();\n        }\n      }\n      (prop as any).key = key;\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  }\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 extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n    this: Parser,\n    node: Undone<T>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: T[\"type\"],\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    this.scope.enter(\n      ScopeFlag.FUNCTION |\n        ScopeFlag.SUPER |\n        (inClassScope ? ScopeFlag.CLASS : 0) |\n        (allowDirectSuper ? ScopeFlag.DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, isConstructor);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return finishedNode;\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    this: Parser,\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\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.ArrayExpression | N.TupleExpression>();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      // @ts-expect-error todo(flow->ts)\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    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<N.Expression | N.SpreadElement>\n      | Array<N.Expression | N.RestElement>,\n    isAsync: boolean,\n    trailingCommaLoc?: Position | null,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody[In] :\n    //   [lookahead ≠ {] ExpressionBody[?In, ~Await]\n    //   { FunctionBody[~Yield, ~Await] }\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n      flags |= ParamKind.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, trailingCommaLoc);\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: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<N.Expression | N.SpreadElement>\n      | Array<N.Expression | N.RestElement>,\n    trailingCommaLoc?: Position | null,\n  ): void {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\n  }\n\n  parseFunctionBodyAndFinish<\n    T extends\n      | N.Function\n      | N.TSDeclareMethod\n      | N.TSDeclareFunction\n      | N.ClassPrivateMethod,\n  >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n    // @ts-expect-error (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowExpression?: boolean | null,\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 as Undone<N.ArrowFunctionExpression>).body =\n        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(\n        this.prodParam.currentFlags() | ParamKind.PARAM_RETURN,\n      );\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            this.raise(\n              Errors.IllegalLanguageModeDirective,\n              // @ts-expect-error kind may not index node\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n                // @ts-expect-error key may not index node\n                !!node.key\n                ? // @ts-expect-error node.key has been guarded\n                  node.key.loc.end\n                : node,\n            );\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.checkIdentifier(\n              node.id,\n              BindingFlag.TYPE_OUTSIDE,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n    return node.type === \"Identifier\";\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 (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: Undone<N.Function>,\n    allowDuplicates: boolean,\n    isArrowFunction?: boolean | null,\n    strictModeChanged: boolean = true,\n  ): void {\n    const checkClashes = !allowDuplicates && new Set<string>();\n    // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n    // since we just store an array of parameters. Perhaps someday we can have\n    // something like class FormalParameters extends Array { ... }, which would\n    // also be helpful when traversing this node.\n    //\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\n    const formalParameters = { type: \"FormalParameters\" } as const;\n    for (const param of node.params) {\n      this.checkLVal(\n        param,\n        formalParameters,\n        BindingFlag.TYPE_VAR,\n        checkClashes,\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    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: N.Node | null,\n  ): (N.Expression | null)[] {\n    const elts: (N.Expression | null)[] = [];\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.addTrailingCommaExtraToNode(nodeForExtra);\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    this: Parser,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | N.SpreadElement | N.ArgumentPlaceholder | null {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, this.state.curPosition(), {\n          unexpected: \",\",\n        });\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, this.state.startLoc);\n      }\n      const node = this.startNode<N.ArgumentPlaceholder>();\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.Identifier>();\n    const name = this.parseIdentifierName(liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(\n    node: Omit<N.Identifier, \"type\">,\n    name: string,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(liberal?: boolean): string {\n    let name: string;\n\n    const { startLoc, type } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\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      if (tokenIsKeyword) {\n        this.replaceToken(tt.name);\n      }\n    } else {\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: Position,\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 (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, startLoc, {\n        keyword: word,\n      });\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(Errors.UnexpectedReservedWord, startLoc, {\n        reservedWord: word,\n      });\n      return;\n    } else if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, startLoc);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, startLoc);\n        return;\n      }\n\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, startLoc);\n        return;\n      }\n\n      this.expressionScope.recordAsyncArrowParametersError(startLoc);\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, startLoc);\n        return;\n      }\n    }\n  }\n\n  // Returns wether `await` is allowed or not in this context, and if it is\n  // keeps track of it to determine whether a module uses top-level await.\n  recordAwaitIfAllowed(): boolean {\n    const isAwaitAllowed =\n      this.prodParam.hasAwait ||\n      (this.options.allowAwaitOutsideFunction && !this.scope.inFunction);\n\n    if (isAwaitAllowed && !this.scope.inFunction) {\n      this.state.hasTopLevelAwait = true;\n    }\n\n    return isAwaitAllowed;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.AwaitExpressionFormalParameter,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, node);\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    if (this.hasPrecedingLineBreak()) return true;\n    const { type } = this.state;\n    return (\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n      type === tt.plusMin ||\n      type === tt.parenL ||\n      type === tt.bracketL ||\n      tokenIsTemplate(type) ||\n      (type === tt._of && !this.state.containsEsc) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      type === tt.regexp ||\n      type === 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\") && type === tt.modulo)\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(this: Parser): N.YieldExpression {\n    const node = this.startNode<N.YieldExpression>();\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n\n    this.next();\n    let delegating = false;\n    let argument: N.Expression | null = 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  // https://tc39.es/ecma262/#prod-ImportCall\n  parseImportCall(\n    this: Parser,\n    node: Undone<N.ImportExpression>,\n  ): N.ImportExpression {\n    this.next(); // eat tt.parenL\n    node.source = this.parseMaybeAssignAllowIn();\n    if (\n      this.hasPlugin(\"importAttributes\") ||\n      (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\"))\n    ) {\n      node.options = null;\n    }\n    if (this.eat(tt.comma)) {\n      if (\n        process.env.BABEL_8_BREAKING ||\n        !(\n          this.hasPlugin(\"moduleAttributes\") ||\n          this.hasPlugin(\"importAssertions\")\n        )\n      ) {\n        this.expectPlugin(\"importAttributes\");\n      }\n      if (!this.match(tt.parenR)) {\n        node.options = this.parseMaybeAssignAllowIn();\n        this.eat(tt.comma);\n      }\n    }\n    this.expect(tt.parenR);\n    return this.finishNode(node, \"ImportExpression\");\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, leftStartLoc: Position) {\n    // @ts-expect-error Remove this in Babel 8\n    if (this.hasPlugin([\"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(Errors.PipelineHeadSequenceExpression, leftStartLoc);\n      }\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\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 `startLoc` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): 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(Errors.PipelineBodyNoArrow, this.state.startLoc);\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused, startLoc);\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    // @ts-expect-error Remove this in Babel 8\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      // Reset the parser’s 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 = ParamKind.PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | ParamKind.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 = ParamKind.PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~ParamKind.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(this: Parser, prec: number): N.Expression {\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.parseMaybeUnaryOrPrivate(),\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(this: Parser): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    if (!this.match(tt.braceL)) {\n      this.unexpected(null, tt.braceL);\n    }\n    // start program node immediately after `{`\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\n    this.next(); // eat `{`\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n\n  // Used in Flow plugin\n  parsePropertyNamePrefixOperator(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n  ): void {}\n}\n", "import type * as N from \"../types.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLoop,\n  tokenIsTemplate,\n  tt,\n  type TokenType,\n  getExportedToken,\n} from \"../tokenizer/types.ts\";\nimport ExpressionParser from \"./expression.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier.ts\";\nimport * as charCodes from \"charcodes\";\nimport {\n  ScopeFlag,\n  ClassElementType,\n  BindingFlag,\n} from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope.ts\";\nimport type { SourceType } from \"../options.ts\";\nimport { Token } from \"../tokenizer/index.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../util/location.ts\";\nimport { cloneStringLiteral, cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\nimport { ParseBindingListFlags } from \"./lval.ts\";\nimport { LoopLabelKind } from \"../tokenizer/state.ts\";\n\nconst loopLabel = { kind: LoopLabelKind.Loop } as const,\n  switchLabel = { kind: LoopLabelKind.Switch } as const;\n\nexport const enum ParseFunctionFlag {\n  Expression = 0b0000,\n  Declaration = 0b0001,\n  HangingDeclaration = 0b0010,\n  NullableId = 0b0100,\n  Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n  StatementOnly = 0b0000,\n  AllowImportExport = 0b0001,\n  AllowDeclaration = 0b0010,\n  AllowFunctionDeclaration = 0b0100,\n  AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(tokens: (Token | N.Comment)[], input: string) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const { type } = token;\n    if (typeof type === \"number\") {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (type === tt.privateName) {\n          const { loc, start, value, end } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(\n            i,\n            1,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.hash),\n              value: \"#\",\n              start: start,\n              end: hashEndPos,\n              startLoc: loc.start,\n              endLoc: hashEndLoc,\n            }),\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.name),\n              value: value,\n              start: hashEndPos,\n              end: end,\n              startLoc: hashEndLoc,\n              endLoc: loc.end,\n            }),\n          );\n          i++;\n          continue;\n        }\n\n        if (tokenIsTemplate(type)) {\n          const { loc, start, value, end } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start) === charCodes.graveAccent) {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          } else {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.braceR),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          }\n          let templateValue,\n            templateElementEnd,\n            templateElementEndLoc,\n            endToken;\n          if (type === tt.templateTail) {\n            // ends with '`'\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          } else {\n            // ends with `${`\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.dollarBraceL),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          }\n          tokens.splice(\n            i,\n            1,\n            startToken,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.template),\n              value: templateValue,\n              start: backquoteEnd,\n              end: templateElementEnd,\n              startLoc: backquoteEndLoc,\n              endLoc: templateElementEndLoc,\n            }),\n            endToken,\n          );\n          i += 2;\n          continue;\n        }\n      }\n      // @ts-expect-error: we manipulate `token` for performance reasons\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nexport default abstract 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(\n    this: Parser,\n    file: Undone<N.File>,\n    program: Undone<N.Program>,\n  ): N.File {\n    file.program = this.parseProgram(program);\n    file.comments = this.comments;\n\n    if (this.options.tokens) {\n      file.tokens = babel7CompatTokens(this.tokens, this.input);\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<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 (this.inModule) {\n      if (\n        !this.options.allowUndeclaredExports &&\n        this.scope.undefinedExports.size > 0\n      ) {\n        for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n          this.raise(Errors.ModuleExportUndefined, at, { localName });\n        }\n      }\n      this.addExtra(program, \"topLevelAwait\", this.state.hasTopLevelAwait);\n    }\n    let finishedProgram: N.Program;\n    if (end === tt.eof) {\n      // finish at eof for top level program\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      // finish immediately before the end token\n      finishedProgram = this.finishNodeAt(\n        program,\n        \"Program\",\n        createPositionWithColumnOffset(this.state.startLoc, -1),\n      );\n    }\n    return finishedProgram;\n  }\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   */\n  stmtToDirective(stmt: N.Statement): N.Directive {\n    const directive = stmt as any;\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n\n    const directiveLiteral = directive.value;\n    const expressionValue = directiveLiteral.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    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n    directiveLiteral.type = \"DirectiveLiteral\";\n\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.InterpreterDirective>();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(): boolean {\n    if (!this.isContextual(tt._let)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n\n  chStartsBindingIdentifier(ch: number, pos: number) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        // We have seen `in` or `instanceof` so far, now check if the identifier\n        // ends here\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === charCodes.backslash) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  chStartsBindingPattern(ch: number) {\n    return (\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingAtom(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      this.chStartsBindingPattern(nextCh) ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n   * starts a variable declaration in the same line so that it should be interpreted as\n   * a keyword.\n   */\n  hasInLineFollowingBindingIdentifierOrBrace(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      nextCh === charCodes.leftCurlyBrace ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  startsUsingForOf(): boolean {\n    const { type, containsEsc } = this.lookahead();\n    if (type === tt._of && !containsEsc) {\n      // `using of` must start a for-lhs-of statement\n      return false;\n    } else if (tokenIsIdentifier(type) && !this.hasFollowingLineBreak()) {\n      this.expectPlugin(\"explicitResourceManagement\");\n      return true;\n    }\n  }\n\n  startsAwaitUsing(): boolean {\n    let next = this.nextTokenInLineStart();\n    if (this.isUnparsedContextual(next, \"using\")) {\n      next = this.nextTokenInLineStartSince(next + 5);\n      const nextCh = this.codePointAtPos(next);\n      if (this.chStartsBindingIdentifier(nextCh, next)) {\n        this.expectPlugin(\"explicitResourceManagement\");\n        return true;\n      }\n    }\n    return false;\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleItem\n  parseModuleItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowImportExport |\n        ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        // This function is actually also used to parse StatementItems,\n        // which with Annex B enabled allows labeled functions.\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-StatementListItem\n  parseStatementListItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        (!this.options.annexB || this.state.strict\n          ? 0\n          : ParseStatementFlag.AllowLabeledFunction),\n    );\n  }\n\n  parseStatementOrSloppyAnnexBFunctionDeclaration(\n    this: Parser,\n    allowLabeledFunction: boolean = false,\n  ) {\n    let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\n    if (this.options.annexB && !this.state.strict) {\n      flags |= ParseStatementFlag.AllowFunctionDeclaration;\n      if (allowLabeledFunction) {\n        flags |= ParseStatementFlag.AllowLabeledFunction;\n      }\n    }\n    return this.parseStatementLike(flags);\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  parseStatement(this: Parser) {\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n  }\n\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatementLike(\n    this: Parser,\n    flags: ParseStatementFlag,\n  ):\n    | N.Statement\n    | N.Declaration\n    | N.ImportDeclaration\n    | N.ExportDefaultDeclaration\n    | N.ExportNamedDeclaration\n    | N.ExportAllDeclaration {\n    let decorators: N.Decorator[] | null = null;\n\n    if (this.match(tt.at)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n\n  parseStatementContent(\n    this: Parser,\n    flags: ParseStatementFlag,\n    decorators?: N.Decorator[] | null,\n  ): N.Statement {\n    const startType = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n    const allowFunctionDeclaration = !!(\n      flags & ParseStatementFlag.AllowFunctionDeclaration\n    );\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\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        return this.parseBreakContinueStatement(node, /* isBreak */ true);\n      case tt._continue:\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n      case tt._do:\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n      case tt._for:\n        return this.parseForStatement(node as Undone<N.ForStatement>);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (!allowFunctionDeclaration) {\n          this.raise(\n            this.state.strict\n              ? Errors.StrictFunction\n              : this.options.annexB\n                ? Errors.SloppyFunctionAnnexB\n                : Errors.SloppyFunction,\n            this.state.startLoc,\n          );\n        }\n        return this.parseFunctionStatement(\n          node as Undone<N.FunctionDeclaration>,\n          false,\n          !allowDeclaration && allowFunctionDeclaration,\n        );\n      case tt._class:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            node as Undone<N.ClassDeclaration>,\n          ),\n          true,\n        );\n\n      case tt._if:\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\n      case tt._return:\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n      case tt._switch:\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n      case tt._throw:\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n      case tt._try:\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n      case tt._await:\n        // [+Await] await [no LineTerminator here] using [no LineTerminator here] BindingList[+Using]\n        if (!this.state.containsEsc && this.startsAwaitUsing()) {\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, node);\n          } else if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, node);\n          }\n          this.next(); // eat 'await'\n          return this.parseVarStatement(\n            node as Undone<N.VariableDeclaration>,\n            \"await using\",\n          );\n        }\n        break;\n      case tt._using:\n        // using [no LineTerminator here] BindingList[+Using]\n        if (\n          this.state.containsEsc ||\n          !this.hasInLineFollowingBindingIdentifierOrBrace()\n        ) {\n          break;\n        }\n        this.expectPlugin(\"explicitResourceManagement\");\n        if (!this.scope.inModule && this.scope.inTopLevel) {\n          this.raise(Errors.UnexpectedUsingDeclaration, this.state.startLoc);\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          \"using\",\n        );\n      case tt._let: {\n        if (this.state.containsEsc) {\n          break;\n        }\n        // `let [` is an explicit negative lookahead for\n        // ExpressionStatement, so special-case it first.\n        const next = this.nextTokenStart();\n        const nextCh = this.codePointAtPos(next);\n        if (nextCh !== charCodes.leftSquareBracket) {\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n          if (\n            !this.chStartsBindingIdentifier(nextCh, next) &&\n            nextCh !== charCodes.leftCurlyBrace\n          ) {\n            break;\n          }\n        }\n      }\n      // fall through\n      case tt._const: {\n        if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n      }\n      // fall through\n      case tt._var: {\n        const kind = this.state.value;\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          kind,\n        );\n      }\n      case tt._while:\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n      case tt._with:\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\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(Errors.UnexpectedImportExport, this.state.startLoc);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (startType === tt._import) {\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\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(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportDefaultDeclaration\n            >,\n            decorators,\n          );\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(result);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (!allowDeclaration) {\n            this.raise(\n              Errors.AsyncFunctionInSingleStatementContext,\n              this.state.startLoc,\n            );\n          }\n          this.next(); // eat 'async'\n          return this.parseFunctionStatement(\n            node as Undone<N.FunctionDeclaration>,\n            true,\n            !allowDeclaration && allowFunctionDeclaration,\n          );\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      tokenIsIdentifier(startType) &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(\n        node as Undone<N.LabeledStatement>,\n        maybeName,\n        expr,\n        flags,\n      );\n    } else {\n      return this.parseExpressionStatement(\n        node as Undone<N.ExpressionStatement>,\n        expr,\n        decorators,\n      );\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(Errors.ImportOutsideModule, node);\n    }\n  }\n\n  decoratorsEnabledBeforeExport(): boolean {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return (\n      this.hasPlugin(\"decorators\") &&\n      this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false\n    );\n  }\n\n  // Attach the decorators to the given class.\n  // NOTE: This method changes the .start location of the class, and thus\n  // can affect comment attachment. Calling it before or after finalizing\n  // the class node (and thus finalizing its comments) changes how comments\n  // before the `class` keyword or before the final .start location of the\n  // class are attached.\n  maybeTakeDecorators<T extends Undone<N.Class>>(\n    maybeDecorators: N.Decorator[] | null,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      if (classNode.decorators && classNode.decorators.length > 0) {\n        // Note: decorators attachment is only attempred multiple times\n        // when the class is part of an export declaration.\n        if (\n          typeof this.getPluginOption(\n            \"decorators\",\n            \"decoratorsBeforeExport\",\n          ) !== \"boolean\"\n        ) {\n          // If `decoratorsBeforeExport` was set to `true` or `false`, we\n          // already threw an error about decorators not being in a valid\n          // position.\n          this.raise(\n            Errors.DecoratorsBeforeAfterExport,\n            classNode.decorators[0],\n          );\n        }\n        classNode.decorators.unshift(...maybeDecorators);\n      } else {\n        classNode.decorators = maybeDecorators;\n      }\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(tt.at));\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, this.state.startLoc);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, this.state.startLoc);\n    }\n\n    return decorators;\n  }\n\n  parseDecorator(this: Parser): N.Decorator {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n    const node = this.startNode<N.Decorator>();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.match(tt.parenL)) {\n        const startLoc = this.state.startLoc;\n        this.next(); // eat '('\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n        expr = this.wrapParenthesis(startLoc, expr);\n\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n        if (\n          this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n            false &&\n          node.expression !== expr\n        ) {\n          this.raise(\n            Errors.DecoratorArgumentsOutsideParentheses,\n            paramsStartLoc,\n          );\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt<N.MemberExpression>(startLoc);\n          node.object = expr;\n          if (this.match(tt.privateName)) {\n            this.classScope.usePrivateName(\n              this.state.value,\n              this.state.startLoc,\n            );\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(this: Parser, expr: N.Expression): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAtNode<N.CallExpression>(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: Undone<N.Node>,\n    isBreak: true,\n  ): N.BreakStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: false,\n  ): N.ContinueStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ): N.BreakStatement | N.ContinueStatement {\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, isBreak);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ) {\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 === LoopLabelKind.Loop)) {\n          break;\n        }\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, node, { type });\n    }\n  }\n\n  parseDebuggerStatement(\n    node: Undone<N.DebuggerStatement>,\n  ): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(this: Parser): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\n  parseDoWhileStatement(\n    this: Parser,\n    node: Undone<N.DoWhileStatement>,\n  ): 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(),\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(\n    this: Parser,\n    node: Undone<N.ForStatement | N.ForInOf>,\n  ): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = null;\n\n    if (this.isContextual(tt._await) && this.recordAwaitIfAllowed()) {\n      awaitAt = this.state.startLoc;\n      this.next();\n    }\n    this.scope.enter(ScopeFlag.OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, null);\n    }\n\n    const startsWithLet = this.isContextual(tt._let);\n    {\n      const startsWithAwaitUsing =\n        this.isContextual(tt._await) && this.startsAwaitUsing();\n      const starsWithUsingDeclaration =\n        startsWithAwaitUsing ||\n        (this.isContextual(tt._using) && this.startsUsingForOf());\n      const isLetOrUsing =\n        (startsWithLet && this.hasFollowingBindingAtom()) ||\n        starsWithUsingDeclaration;\n\n      if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n        const initNode = this.startNode<N.VariableDeclaration>();\n        let kind;\n        if (startsWithAwaitUsing) {\n          kind = \"await using\";\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, this.state.startLoc);\n          }\n          this.next(); // eat 'await'\n        } else {\n          kind = this.state.value;\n        }\n        this.next();\n        this.parseVar(initNode, true, kind);\n        const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n        const isForIn = this.match(tt._in);\n        if (isForIn && starsWithUsingDeclaration) {\n          this.raise(Errors.ForInUsing, init);\n        }\n        if (\n          (isForIn || this.isContextual(tt._of)) &&\n          init.declarations.length === 1\n        ) {\n          return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n        }\n        if (awaitAt !== null) {\n          this.unexpected(awaitAt);\n        }\n        return this.parseFor(node as Undone<N.ForStatement>, init);\n      }\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 startsWithAsync = this.isContextual(tt._async);\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(tt._of);\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, init);\n      }\n\n      if (\n        // `for await (async of []);` is allowed.\n        awaitAt === null &&\n        startsWithAsync &&\n        init.type === \"Identifier\"\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(Errors.ForOfAsync, init);\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, /* isLHS */ true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, { type });\n      return this.parseForIn(\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\n        // @ts-expect-error init has been transformed to an assignable\n        init,\n        awaitAt,\n      );\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node as Undone<N.ForStatement>, init);\n  }\n\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\n  parseFunctionStatement(\n    this: Parser,\n    node: Undone<N.FunctionDeclaration>,\n    isAsync: boolean,\n    isHangingDeclaration: boolean,\n  ): N.FunctionDeclaration {\n    this.next(); // eat 'function'\n    return this.parseFunction(\n      node,\n      ParseFunctionFlag.Declaration |\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n        (isAsync ? ParseFunctionFlag.Async : 0),\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-IfStatement\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    // Annex B.3.3\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n    node.alternate = this.eat(tt._else)\n      ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\n      : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(Errors.IllegalReturn, this.state.startLoc);\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  // https://tc39.es/ecma262/#prod-SwitchStatement\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(ScopeFlag.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        // @ts-expect-error Fixme\n        cases.push((cur = this.startNode<N.SwitchCase>()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              Errors.MultipleDefaultsInSwitch,\n              this.state.lastTokStartLoc,\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.parseStatementListItem());\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(this: Parser, node: Undone<N.ThrowStatement>) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, this.state.lastTokEndLoc);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(this: Parser): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    this.scope.enter(\n      this.options.annexB && param.type === \"Identifier\"\n        ? ScopeFlag.SIMPLE_CATCH\n        : 0,\n    );\n    this.checkLVal(\n      param,\n      { type: \"CatchClause\" },\n      BindingFlag.TYPE_CATCH_PARAM,\n    );\n\n    return param;\n  }\n\n  parseTryStatement(\n    this: Parser,\n    node: Undone<N.TryStatement>,\n  ): 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.CatchClause>();\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(ScopeFlag.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(Errors.NoCatchOrFinally, node);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-VariableStatement\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\n  parseVarStatement(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  // https://tc39.es/ecma262/#prod-WhileStatement\n  parseWhileStatement(\n    this: Parser,\n    node: Undone<N.WhileStatement>,\n  ): 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(),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(\n    this: Parser,\n    node: Undone<N.WithStatement>,\n  ): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, this.state.startLoc);\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(),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-LabelledStatement\n  parseLabeledStatement(\n    this: Parser,\n    node: Undone<N.LabeledStatement>,\n    maybeName: string,\n    expr: N.Identifier,\n    flags: ParseStatementFlag,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, expr, {\n          labelName: maybeName,\n        });\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type)\n      ? LoopLabelKind.Loop\n      : this.match(tt._switch)\n        ? LoopLabelKind.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    // https://tc39.es/ecma262/#prod-LabelledItem\n    node.body =\n      flags & ParseStatementFlag.AllowLabeledFunction\n        ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\n        : this.parseStatement();\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: Undone<N.ExpressionStatement>,\n    expr: N.Expression,\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    decorators: N.Decorator[] | null,\n  ) {\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    this: Parser,\n    allowDirectives: boolean = false,\n    createNewLexicalScope: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode<N.BlockStatement>();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(ScopeFlag.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    this: Parser,\n    node: Undone<N.BlockStatementLike>,\n    allowDirectives: boolean | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n    const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n      []);\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    this: Parser,\n    body: N.Statement[],\n    directives: N.Directive[] | undefined | null,\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 = topLevel\n        ? this.parseModuleItem()\n        : this.parseStatementListItem();\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    afterBlockParse?.call(this, hasStrictModeDirective);\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    this: Parser,\n    node: Undone<N.ForStatement>,\n    init?: N.VariableDeclaration | N.Expression | null,\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(),\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    this: Parser,\n    node: Undone<N.ForInOf>,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt?: Position | null,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        !this.options.annexB ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(Errors.ForInOfLoopInitializer, init, {\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n      });\n    }\n\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, init, {\n        ancestor: { type: \"ForStatement\" },\n      });\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(),\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    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): Undone<N.VariableDeclaration> {\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode<N.VariableDeclarator>();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(tt.eq)\n        ? null\n        : isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n\n      if (decl.init === null && !allowMissingInitializer) {\n        if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            {\n              kind: \"destructuring\",\n            },\n          );\n        } else if (\n          (kind === \"const\" || kind === \"using\" || kind === \"await using\") &&\n          !(this.match(tt._in) || this.isContextual(tt._of))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            { kind },\n          );\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(\n    this: Parser,\n    decl: Undone<N.VariableDeclarator>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n  ): void {\n    const id = this.parseBindingAtom();\n    if (kind === \"using\" || kind === \"await using\") {\n      if (id.type === \"ArrayPattern\" || id.type === \"ObjectPattern\") {\n        this.raise(Errors.UsingDeclarationHasBindingPattern, id.loc.start);\n      }\n    }\n    this.checkLVal(\n      id,\n      { type: \"VariableDeclarator\" },\n      kind === \"var\" ? BindingFlag.TYPE_VAR : BindingFlag.TYPE_LEXICAL,\n    );\n    decl.id = id;\n  }\n\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n  parseAsyncFunctionExpression(\n    this: Parser,\n    node: Undone<N.FunctionExpression>,\n  ): N.FunctionExpression {\n    return this.parseFunction(node, ParseFunctionFlag.Async);\n  }\n\n  // Parse a function declaration or expression (depending on the\n  // ParseFunctionFlag.Declaration flag).\n\n  parseFunction<T extends N.NormalFunction>(\n    this: Parser,\n    node: Undone<T>,\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n  ): T {\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star)) {\n      if (hangingDeclaration) {\n        this.raise(\n          Errors.GeneratorInSingleStatementContext,\n          this.state.startLoc,\n        );\n      }\n      this.next(); // eat *\n      node.generator = true;\n    }\n\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(ScopeFlag.FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* isConstructor */ 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        isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isDeclaration && !hangingDeclaration) {\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 as T);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node as T;\n  }\n\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n    return requireId || tokenIsIdentifier(this.state.type)\n      ? this.parseIdentifier()\n      : null;\n  }\n\n  parseFunctionParams(\n    this: Parser,\n    node: Undone<N.Function>,\n    isConstructor?: boolean,\n  ): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      ParseBindingListFlags.IS_FUNCTION_PARAMS |\n        (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\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 (BindingFlag.TYPE_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.options.annexB || this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BindingFlag.TYPE_VAR\n          : BindingFlag.TYPE_LEXICAL\n        : BindingFlag.TYPE_FUNCTION,\n      node.id.loc.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T extends N.Class>(\n    this: Parser,\n    node: Undone<T>,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next(); // 'class'\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  nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n    return (\n      (key.type === \"Identifier\" && key.name === \"constructor\") ||\n      (key.type === \"StringLiteral\" && key.value === \"constructor\")\n    );\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed && !method.static && this.nameIsConstructor(method.key)\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    this: Parser,\n    hadSuperClass: boolean,\n    oldStrict: boolean,\n  ): 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 = this.startNode<N.ClassBody>();\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(\n              Errors.DecoratorSemicolon,\n              this.state.lastTokEndLoc,\n            );\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.ClassMember>();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          // @ts-expect-error Fixme\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          // @ts-expect-error Fixme\n          member.kind === \"constructor\" &&\n          // @ts-expect-error Fixme\n          member.decorators &&\n          // @ts-expect-error Fixme\n          member.decorators.length > 0\n        ) {\n          this.raise(Errors.DecoratorConstructor, member);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, this.state.startLoc);\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    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = member as 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 as 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    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(tt._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 as any as N.StaticBlock);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod = member as N.ClassMethod;\n    const privateMethod = member as N.ClassPrivateMethod;\n    const publicProp = member as N.ClassProperty;\n    const privateProp = member as N.ClassPrivateProperty;\n    const accessorProp = member as N.ClassAccessorProperty;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\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(Errors.ConstructorIsGenerator, publicMethod.key);\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 =\n      !this.state.containsEsc && tokenIsIdentifier(this.state.type);\n    const key = this.parseClassElementName(member);\n    const maybeContextualKw = isContextual ? (key as N.Identifier).name : null;\n    const isPrivate = this.isPrivateName(key);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\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(Errors.DuplicateConstructor, key);\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, key);\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 (maybeContextualKw === \"async\" && !this.isLineTerminator()) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\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(Errors.ConstructorIsAsync, publicMethod.key);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      (maybeContextualKw === \"get\" || maybeContextualKw === \"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 = maybeContextualKw;\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(Errors.ConstructorIsAccessor, publicMethod.key);\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 (maybeContextualKw === \"accessor\" && !this.isLineTerminator()) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n\n      // The so-called parsed name would have been \"accessor\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\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/ecma262/#prod-ClassElementName\n  parseClassElementName(\n    this: Parser,\n    member: Undone<N.ClassMember>,\n  ): N.Expression | N.Identifier | N.PrivateName {\n    const { type, value } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(Errors.StaticPrototype, this.state.startLoc);\n    }\n\n    if (type === tt.privateName) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, this.state.startLoc);\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    this.parsePropertyName(member);\n    return member.key;\n  }\n\n  parseClassStaticBlock(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<\n      N.StaticBlock & {\n        decorators?: Array<N.Decorator>;\n      }\n    >,\n  ) {\n    // Start a new lexical scope\n    this.scope.enter(\n      ScopeFlag.CLASS | ScopeFlag.STATIC_BLOCK | ScopeFlag.SUPER,\n    );\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(ParamKind.PARAM);\n    const body: N.Statement[] = (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(Errors.DecoratorStaticBlock, member);\n    }\n  }\n\n  pushClassProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassProperty,\n  ) {\n    if (!prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: Undone<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      ClassElementType.OTHER,\n      node.key.loc.start,\n    );\n  }\n\n  pushClassAccessorProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassAccessorProperty,\n    isPrivate: boolean,\n  ) {\n    if (!isPrivate && !prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n\n    if (isPrivate) {\n      this.classScope.declarePrivateName(\n        this.getPrivateNameSV(node.key as N.PrivateName),\n        ClassElementType.OTHER,\n        node.key.loc.start,\n      );\n    }\n  }\n\n  pushClassMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<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    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<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          ? ClassElementType.STATIC_GETTER\n          : ClassElementType.INSTANCE_GETTER\n        : node.kind === \"set\"\n          ? node.static\n            ? ClassElementType.STATIC_SETTER\n            : ClassElementType.INSTANCE_SETTER\n          : ClassElementType.OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(\n    node: Undone<N.ClassPrivateMethod | N.TSDeclareMethod>,\n    kind: number,\n  ) {\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key as N.PrivateName),\n      kind,\n      node.key.loc.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n  ): void {}\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    this: Parser,\n    node: Undone<N.ClassPrivateProperty>,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassAccessorProperty(\n    this: Parser,\n    node: N.ClassAccessorProperty,\n  ): N.ClassAccessorProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-Initializer\n  parseInitializer(\n    this: Parser,\n    node: Undone<\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n    >,\n  ): void {\n    this.scope.enter(ScopeFlag.CLASS | ScopeFlag.SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(ParamKind.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: Undone<N.Class>,\n    isStatement: boolean,\n    optionalId?: boolean | null,\n    bindingType: BindingFlag = BindingFlag.TYPE_CLASS,\n  ): void {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, this.state.startLoc);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(this: Parser, node: Undone<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(\n    this: Parser,\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    decorators: N.Decorator[] | null,\n  ): N.AnyExport {\n    const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n      node,\n      /* isExport */ true,\n    );\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\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      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(node, true);\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n      this.unexpected(null, tt.braceL);\n    }\n\n    if (hasNamespace && parseAfterNamespace) {\n      this.unexpected(null, tt._from);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(\n        node as Undone<N.ExportNamedDeclaration>,\n        isFromRequired,\n      );\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(\n        node as Undone<N.ExportNamedDeclaration>,\n      );\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (node2.declaration?.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\n      // export default ...\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n\n      this.checkExport(node2, true, true);\n\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    this.unexpected(null, tt.braceL);\n  }\n\n  eatExportStar(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\", maybeDefaultIdentifier?.loc.start);\n      const id = maybeDefaultIdentifier || this.parseIdentifier(true);\n      const specifier = this.startNodeAtNode<N.ExportDefaultSpecifier>(id);\n      specifier.exported = id;\n      (node as Undone<N.ExportNamedDeclaration>).specifiers = [\n        this.finishNode(specifier, \"ExportDefaultSpecifier\"),\n      ];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.isContextual(tt._as)) {\n      (node as Undone<N.ExportNamedDeclaration>).specifiers ??= [];\n\n      const specifier = this.startNodeAt<N.ExportNamespaceSpecifier>(\n        this.state.lastTokStartLoc,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      (node as Undone<N.ExportNamedDeclaration>).specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.match(tt.braceL)) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!node2.specifiers) node2.specifiers = [];\n      const isTypeExport = node2.exportKind === \"type\";\n      node2.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n\n      node2.source = null;\n      node2.declaration = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node2.assertions = [];\n      }\n\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n  ): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(tt._async)) return false;\n    const next = this.nextTokenInLineStart();\n    return this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression(\n    this: Parser,\n  ): N.ExportDefaultDeclaration[\"declaration\"] {\n    const expr = this.startNode();\n\n    if (this.match(tt._function)) {\n      this.next();\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n      );\n    } else if (this.isAsyncFunction()) {\n      this.next(); // eat 'async'\n      this.next(); // eat 'function'\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration |\n          ParseFunctionFlag.NullableId |\n          ParseFunctionFlag.Async,\n      );\n    }\n\n    if (this.match(tt._class)) {\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n    }\n\n    if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n      ) {\n        this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n      }\n      return this.parseClass(\n        this.maybeTakeDecorators(\n          this.parseDecorators(false),\n          this.startNode<N.ClassDeclaration>(),\n        ),\n        true,\n        true,\n      );\n    }\n\n    if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n      throw this.raise(Errors.UnsupportedDefaultExport, this.state.startLoc);\n    }\n\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n  parseExportDeclaration(\n    this: Parser,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    node: Undone<N.ExportNamedDeclaration>,\n  ): N.Declaration | undefined | null {\n    if (this.match(tt._class)) {\n      const node = this.parseClass(\n        this.startNode<N.ClassDeclaration>(),\n        true,\n        false,\n      );\n      return node;\n    }\n    return this.parseStatementListItem() as N.Declaration;\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    const { type } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n        return false;\n      }\n      if (\n        (type === tt._type || type === tt._interface) &&\n        !this.state.containsEsc\n      ) {\n        const { type: nextType } = 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          (tokenIsIdentifier(nextType) && nextType !== tt._from) ||\n          nextType === 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      (tokenIsIdentifier(this.state.type) && 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(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    expect?: boolean,\n  ): void {\n    if (this.eatContextual(tt._from)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      this.maybeParseImportAttributes(node);\n      this.checkJSONModuleImport(node);\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    const { type } = this.state;\n    if (type === tt.at) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (\n          this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n        ) {\n          this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n        }\n\n        return true;\n      }\n    }\n\n    if (this.isContextual(tt._using)) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    if (this.isContextual(tt._await) && this.startsAwaitUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    return (\n      type === tt._var ||\n      type === tt._const ||\n      type === tt._function ||\n      type === tt._class ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: Undone<\n      | N.ExportNamedDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportDefaultDeclaration\n    >,\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 as any as 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(Errors.ExportDefaultFromAsIdentifier, declaration);\n          }\n        }\n        // @ts-expect-error node.specifiers may not exist\n      } else if (node.specifiers?.length) {\n        // Named exports\n        // @ts-expect-error node.specifiers may not exist\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, specifier, {\n                localName: local.value,\n                exportName,\n              });\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if ((node as Undone<N.ExportNamedDeclaration>).declaration) {\n        const decl = (node as Undone<N.ExportNamedDeclaration>).declaration;\n        // Exported declarations\n        if (\n          decl.type === \"FunctionDeclaration\" ||\n          decl.type === \"ClassDeclaration\"\n        ) {\n          const { id } = decl;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (decl.type === \"VariableDeclaration\") {\n          for (const declaration of decl.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\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      // @ts-expect-error migrate to Babel types\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: Undone<\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier\n    >,\n    exportName: string,\n  ): void {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, node);\n      } else {\n        this.raise(Errors.DuplicateExport, node, { exportName });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(isInTypeExport: boolean): 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      const isMaybeTypeOnly = this.isContextual(tt._type);\n      const isString = this.match(tt.string);\n      const node = this.startNode<N.ExportSpecifier>();\n      node.local = this.parseModuleExportName() as N.Identifier;\n      nodes.push(\n        this.parseExportSpecifier(\n          node,\n          isString,\n          isInTypeExport,\n          isMaybeTypeOnly,\n        ),\n      );\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(\n    node: any,\n    isString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    isInTypeExport: boolean,\n    isMaybeTypeOnly: boolean,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ExportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = cloneIdentifier(node.local);\n    }\n    return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\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 = loneSurrogate.exec(result.value);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, result, {\n          surrogateCharCode: surrogate[0].charCodeAt(0),\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  isJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ): boolean {\n    if (node.assertions != null) {\n      return node.assertions.some(({ key, value }) => {\n        return (\n          value.value === \"json\" &&\n          (key.type === \"Identifier\"\n            ? key.name === \"type\"\n            : key.value === \"type\")\n        );\n      });\n    }\n    return false;\n  }\n\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\n    const { specifiers } = node;\n    const singleBindingType =\n      specifiers.length === 1 ? specifiers[0].type : null;\n\n    if (node.phase === \"source\") {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(\n          Errors.SourcePhaseImportRequiresDefault,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.phase === \"defer\") {\n      if (singleBindingType !== \"ImportNamespaceSpecifier\") {\n        this.raise(\n          Errors.DeferImportRequiresNamespace,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.module) {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(Errors.ImportReflectionNotBinding, specifiers[0].loc.start);\n      }\n      if (node.assertions?.length > 0) {\n        this.raise(\n          Errors.ImportReflectionHasAssertion,\n          specifiers[0].loc.start,\n        );\n      }\n    }\n  }\n\n  checkJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ) {\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      // @ts-expect-error specifiers may not index node\n      const { specifiers } = node;\n      if (specifiers != null) {\n        // @ts-expect-error refine specifier types\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\"\n              ? imported.name !== \"default\"\n              : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(\n            Errors.ImportJSONBindingNotDefault,\n            nonDefaultNamedSpecifier.loc.start,\n          );\n        }\n      }\n    }\n  }\n\n  isPotentialImportPhase(isExport: boolean): boolean {\n    if (isExport) return false;\n    return (\n      this.isContextual(tt._source) ||\n      this.isContextual(tt._defer) ||\n      (!process.env.BABEL_8_BREAKING && this.isContextual(tt._module))\n    );\n  }\n\n  applyImportPhase(\n    node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n    isExport: boolean,\n    phase: string | null,\n    loc?: Position,\n  ): void {\n    if (isExport) {\n      if (!process.env.IS_PUBLISH) {\n        if (\n          (!process.env.BABEL_8_BREAKING && phase === \"module\") ||\n          phase === \"source\"\n        ) {\n          throw new Error(\n            `Assertion failure: export declarations do not support the '${phase}' phase.`,\n          );\n        }\n      }\n      return;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && phase === \"module\") {\n      this.expectPlugin(\"importReflection\", loc);\n      (node as N.ImportDeclaration).module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      (node as N.ImportDeclaration).module = false;\n    }\n\n    if (phase === \"source\") {\n      this.expectPlugin(\"sourcePhaseImports\", loc);\n      (node as N.ImportDeclaration).phase = \"source\";\n    } else if (phase === \"defer\") {\n      this.expectPlugin(\"deferredImportEvaluation\", loc);\n      (node as N.ImportDeclaration).phase = \"defer\";\n    } else if (this.hasPlugin(\"sourcePhaseImports\")) {\n      (node as N.ImportDeclaration).phase = null;\n    }\n  }\n\n  /*\n   * Parse `source` in `import source x from \"x\"`, disambiguating\n   * `import source from \"x\"` and `import source from from \"x\"`.\n   *\n   * This function might return an identifier representing the `source`\n   * if it eats `source` and then discovers that it was the default import\n   * binding and not the import reflection.\n   *\n   * This function is also used to parse `import type` and `import typeof`\n   * in the TS and Flow plugins, and for parsing `import defer`.\n   */\n  parseMaybeImportPhase(\n    node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    isExport: boolean,\n  ): N.Identifier | null {\n    if (!this.isPotentialImportPhase(isExport)) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      return null;\n    }\n\n    const phaseIdentifier = this.parseIdentifier(true);\n\n    const { type } = this.state;\n    const isImportPhase = tokenIsKeywordOrIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n\n    if (isImportPhase) {\n      this.resetPreviousIdentifierLeadingComments(phaseIdentifier);\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        phaseIdentifier.name,\n        phaseIdentifier.loc.start,\n      );\n      return null;\n    } else {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      // `<phase>` is a default binding, return it to the main import declaration parser\n      return phaseIdentifier;\n    }\n  }\n\n  isPrecedingIdImportPhase(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    phase: string,\n  ) {\n    const { type } = this.state;\n    return tokenIsIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n    if (this.match(tt.string)) {\n      // import '...'\n      return this.parseImportSourceAndAttributes(node);\n    }\n\n    return this.parseImportSpecifiersAndAfter(\n      node,\n      this.parseMaybeImportPhase(node, /* isExport */ false),\n    );\n  }\n\n  parseImportSpecifiersAndAfter(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): N.AnyImport {\n    node.specifiers = [];\n\n    // check if we have a default import like\n    // import React from \"react\";\n    const hasDefault = this.maybeParseDefaultImportSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\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(tt._from);\n\n    return this.parseImportSourceAndAttributes(node);\n  }\n\n  parseImportSourceAndAttributes(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n  ): N.AnyImport {\n    node.specifiers ??= [];\n    node.source = this.parseImportSource();\n    this.maybeParseImportAttributes(node);\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(this: Parser): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom() as N.StringLiteral;\n  }\n\n  parseImportSpecifierLocal<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    node: Undone<N.ImportDeclaration>,\n    specifier: Undone<T>,\n    type: T[\"type\"],\n  ): void {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n\n  finishImportSpecifier<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    specifier: Undone<T>,\n    type: T[\"type\"],\n    bindingType: BindingFlag = BindingFlag.TYPE_LEXICAL,\n  ) {\n    this.checkLVal(specifier.local, { type }, bindingType);\n    return this.finishNode(specifier, type);\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-attributes/#prod-WithEntries WithEntries}\n   */\n  parseImportAttributes(): N.ImportAttribute[] {\n    this.expect(tt.braceL);\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.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          Errors.ModuleAttributesWithDuplicateKeys,\n          this.state.startLoc,\n          {\n            key: keyName,\n          },\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.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    this.expect(tt.braceR);\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   */\n  parseModuleAttributes() {\n    const attrs: N.ImportAttribute[] = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode<N.ImportAttribute>();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, node.key);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, node.key, {\n          key: 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.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAttributes(\n    node: Undone<\n      N.ImportDeclaration | N.ExportNamedDeclaration | N.ExportAllDeclaration\n    >,\n  ) {\n    let attributes: N.ImportAttribute[];\n    if (!process.env.BABEL_8_BREAKING) {\n      // eslint-disable-next-line no-var\n      var useWith = false;\n    }\n\n    // https://tc39.es/proposal-import-attributes/#prod-WithClause\n    if (this.match(tt._with)) {\n      if (\n        this.hasPrecedingLineBreak() &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      ) {\n        // This will be parsed as a with statement, and we will throw a\n        // better error about it not being supported in strict mode.\n        return;\n      }\n\n      this.next(); // eat `with`\n\n      if (process.env.BABEL_8_BREAKING) {\n        this.expectPlugin(\"importAttributes\");\n        attributes = this.parseImportAttributes();\n      } else if (this.hasPlugin(\"moduleAttributes\")) {\n        attributes = this.parseModuleAttributes();\n      } else {\n        if (!this.hasPlugin(\"importAssertions\")) {\n          this.expectPlugin(\"importAttributes\");\n        }\n        attributes = this.parseImportAttributes();\n      }\n      if (!process.env.BABEL_8_BREAKING) {\n        useWith = true;\n      }\n    } else if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n      if (this.hasPlugin(\"importAttributes\")) {\n        if (\n          this.getPluginOption(\"importAttributes\", \"deprecatedAssertSyntax\") !==\n          true\n        ) {\n          this.raise(Errors.ImportAttributesUseAssert, this.state.startLoc);\n        }\n        this.addExtra(node, \"deprecatedAssertSyntax\", true);\n      } else if (process.env.BABEL_8_BREAKING) {\n        this.expectPlugin(\"importAttributes\");\n      } else {\n        this.expectOnePlugin([\"importAttributes\", \"importAssertions\"]);\n      }\n      this.next(); // eat `assert`\n      attributes = this.parseImportAttributes();\n    } else if (\n      this.hasPlugin(\"importAttributes\") ||\n      (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\"))\n    ) {\n      attributes = [];\n    } else if (!process.env.BABEL_8_BREAKING) {\n      if (this.hasPlugin(\"moduleAttributes\")) {\n        attributes = [];\n      } else return;\n    } else return;\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      !useWith &&\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      node.assertions = attributes;\n    } else {\n      node.attributes = attributes;\n    }\n  }\n\n  maybeParseDefaultImportSpecifier(\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): boolean {\n    // import defaultObj, { x, y as z } from '...'\n    if (maybeDefaultIdentifier) {\n      const specifier = this.startNodeAtNode<N.ImportDefaultSpecifier>(\n        maybeDefaultIdentifier,\n      );\n      specifier.local = maybeDefaultIdentifier;\n      node.specifiers.push(\n        this.finishImportSpecifier(specifier, \"ImportDefaultSpecifier\"),\n      );\n      return true;\n    } else if (\n      // We allow keywords, and parseImportSpecifierLocal will report a recoverable error\n      tokenIsKeywordOrIdentifier(this.state.type)\n    ) {\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode<N.ImportDefaultSpecifier>(),\n        \"ImportDefaultSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n      this.next();\n      this.expectContextual(tt._as);\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: Undone<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(Errors.DestructureNamedImport, this.state.startLoc);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const specifier = this.startNode<N.ImportSpecifier>();\n      const importedIsString = this.match(tt.string);\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        node.importKind === \"type\" || node.importKind === \"typeof\",\n        isMaybeTypeOnly,\n        undefined,\n      );\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(\n    specifier: Undone<N.ImportSpecifier>,\n    importedIsString: boolean,\n    /* used in TypeScript and Flow parser */\n    isInTypeOnlyImport: boolean,\n    isMaybeTypeOnly: boolean,\n    bindingType: BindingFlag | undefined,\n  ): N.ImportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, specifier, {\n          importName: (imported as N.StringLiteral).value,\n        });\n      }\n      this.checkReservedWord(\n        (imported as N.Identifier).name,\n        specifier.loc.start,\n        true,\n        true,\n      );\n      if (!specifier.local) {\n        specifier.local = cloneIdentifier(imported);\n      }\n    }\n    return this.finishImportSpecifier(\n      specifier,\n      \"ImportSpecifier\",\n      bindingType,\n    );\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", "import type { Options } from \"../options.ts\";\nimport type * as N from \"../types.ts\";\nimport { getOptions } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  // todo(flow->ts) - this probably can be removed\n  // abstract jsxParseOpeningElementAfterName(\n  //   node: N.JSXOpeningElement,\n  // ): N.JSXOpeningElement;\n\n  constructor(\n    options: Options | undefined | null,\n    input: string,\n    pluginsMap: PluginsMap,\n  ) {\n    options = getOptions(options);\n    super(options, input);\n\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap;\n    this.filename = options.sourceFilename;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): new (...args: any) => ScopeHandler {\n    return ScopeHandler;\n  }\n\n  parse(): N.File {\n    this.enterInitialScopes();\n    const file = this.startNode<N.File>();\n    const program = this.startNode<N.Program>();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    file.comments.length = this.state.commentsLen;\n    return file as N.File;\n  }\n}\n", "import type { Options } from \"./options.ts\";\nimport {\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n} from \"./plugin-utils.ts\";\nimport type {\n  PluginConfig as ParserPlugin,\n  FlowPluginOptions,\n  RecordAndTuplePluginOptions,\n  PipelineOperatorPluginOptions,\n} from \"./typings.ts\";\nimport Parser, { type PluginsMap } from \"./parser/index.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\n\nimport type { Expression, File } from \"./types.ts\";\nexport type { Expression, File };\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\nfunction generateExportedTokenTypes(\n  internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n  const tokenTypes: Record<string, ExportedTokenType> = {};\n  for (const typeName of Object.keys(\n    internalTokenTypes,\n  ) as (keyof InternalTokenTypes)[]) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(options: Options | undefined | null, input: string): Parser {\n  let cls = Parser;\n  const pluginsMap: PluginsMap = new Map();\n  if (options?.plugins) {\n    for (const plugin of options.plugins) {\n      let name, opts;\n      if (typeof plugin === \"string\") {\n        name = plugin;\n      } else {\n        [name, opts] = plugin;\n      }\n      if (!pluginsMap.has(name)) {\n        pluginsMap.set(name, opts || {});\n      }\n    }\n    validatePlugins(pluginsMap);\n    cls = getParserClass(pluginsMap);\n  }\n\n  return new cls(options, input, pluginsMap);\n}\n\nconst parserClassCache = new Map<string, new (...args: any) => Parser>();\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(\n  pluginsMap: Map<string, any>,\n): new (...args: any) => Parser {\n  const pluginList = [];\n  for (const name of mixinPluginNames) {\n    if (pluginsMap.has(name)) {\n      pluginList.push(name);\n    }\n  }\n  const key = pluginList.join(\"|\");\n  let cls = parserClassCache.get(key);\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      // @ts-expect-error todo(flow->ts)\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache.set(key, cls);\n  }\n  return cls;\n}\n\nexport type {\n  FlowPluginOptions,\n  ParserPlugin,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n};\nexport type ParserOptions = Partial<Options>;\n", "\"use strict\";\nexports.__esModule = true;\nexports.distance = exports.closest = void 0;\nvar peq = new Uint32Array(0x10000);\nvar myers_32 = function (a, b) {\n    var n = a.length;\n    var m = b.length;\n    var lst = 1 << (n - 1);\n    var pv = -1;\n    var mv = 0;\n    var sc = n;\n    var i = n;\n    while (i--) {\n        peq[a.charCodeAt(i)] |= 1 << i;\n    }\n    for (i = 0; i < m; i++) {\n        var eq = peq[b.charCodeAt(i)];\n        var xv = eq | mv;\n        eq |= ((eq & pv) + pv) ^ pv;\n        mv |= ~(eq | pv);\n        pv &= eq;\n        if (mv & lst) {\n            sc++;\n        }\n        if (pv & lst) {\n            sc--;\n        }\n        mv = (mv << 1) | 1;\n        pv = (pv << 1) | ~(xv | mv);\n        mv &= xv;\n    }\n    i = n;\n    while (i--) {\n        peq[a.charCodeAt(i)] = 0;\n    }\n    return sc;\n};\nvar myers_x = function (b, a) {\n    var n = a.length;\n    var m = b.length;\n    var mhc = [];\n    var phc = [];\n    var hsize = Math.ceil(n / 32);\n    var vsize = Math.ceil(m / 32);\n    for (var i = 0; i < hsize; i++) {\n        phc[i] = -1;\n        mhc[i] = 0;\n    }\n    var j = 0;\n    for (; j < vsize - 1; j++) {\n        var mv_1 = 0;\n        var pv_1 = -1;\n        var start_1 = j * 32;\n        var vlen_1 = Math.min(32, m) + start_1;\n        for (var k = start_1; k < vlen_1; k++) {\n            peq[b.charCodeAt(k)] |= 1 << k;\n        }\n        for (var i = 0; i < n; i++) {\n            var eq = peq[a.charCodeAt(i)];\n            var pb = (phc[(i / 32) | 0] >>> i) & 1;\n            var mb = (mhc[(i / 32) | 0] >>> i) & 1;\n            var xv = eq | mv_1;\n            var xh = ((((eq | mb) & pv_1) + pv_1) ^ pv_1) | eq | mb;\n            var ph = mv_1 | ~(xh | pv_1);\n            var mh = pv_1 & xh;\n            if ((ph >>> 31) ^ pb) {\n                phc[(i / 32) | 0] ^= 1 << i;\n            }\n            if ((mh >>> 31) ^ mb) {\n                mhc[(i / 32) | 0] ^= 1 << i;\n            }\n            ph = (ph << 1) | pb;\n            mh = (mh << 1) | mb;\n            pv_1 = mh | ~(xv | ph);\n            mv_1 = ph & xv;\n        }\n        for (var k = start_1; k < vlen_1; k++) {\n            peq[b.charCodeAt(k)] = 0;\n        }\n    }\n    var mv = 0;\n    var pv = -1;\n    var start = j * 32;\n    var vlen = Math.min(32, m - start) + start;\n    for (var k = start; k < vlen; k++) {\n        peq[b.charCodeAt(k)] |= 1 << k;\n    }\n    var score = m;\n    for (var i = 0; i < n; i++) {\n        var eq = peq[a.charCodeAt(i)];\n        var pb = (phc[(i / 32) | 0] >>> i) & 1;\n        var mb = (mhc[(i / 32) | 0] >>> i) & 1;\n        var xv = eq | mv;\n        var xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n        var ph = mv | ~(xh | pv);\n        var mh = pv & xh;\n        score += (ph >>> (m - 1)) & 1;\n        score -= (mh >>> (m - 1)) & 1;\n        if ((ph >>> 31) ^ pb) {\n            phc[(i / 32) | 0] ^= 1 << i;\n        }\n        if ((mh >>> 31) ^ mb) {\n            mhc[(i / 32) | 0] ^= 1 << i;\n        }\n        ph = (ph << 1) | pb;\n        mh = (mh << 1) | mb;\n        pv = mh | ~(xv | ph);\n        mv = ph & xv;\n    }\n    for (var k = start; k < vlen; k++) {\n        peq[b.charCodeAt(k)] = 0;\n    }\n    return score;\n};\nvar distance = function (a, b) {\n    if (a.length < b.length) {\n        var tmp = b;\n        b = a;\n        a = tmp;\n    }\n    if (b.length === 0) {\n        return a.length;\n    }\n    if (a.length <= 32) {\n        return myers_32(a, b);\n    }\n    return myers_x(a, b);\n};\nexports.distance = distance;\nvar closest = function (str, arr) {\n    var min_distance = Infinity;\n    var min_index = 0;\n    for (var i = 0; i < arr.length; i++) {\n        var dist = distance(str, arr[i]);\n        if (dist < min_distance) {\n            min_distance = dist;\n            min_index = i;\n        }\n    }\n    return arr[min_index];\n};\nexports.closest = closest;\n", "module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n  var pathext = options.pathExt !== undefined ?\n    options.pathExt : process.env.PATHEXT\n\n  if (!pathext) {\n    return true\n  }\n\n  pathext = pathext.split(';')\n  if (pathext.indexOf('') !== -1) {\n    return true\n  }\n  for (var i = 0; i < pathext.length; i++) {\n    var p = pathext[i].toLowerCase()\n    if (p && path.substr(-p.length).toLowerCase() === p) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction checkStat (stat, path, options) {\n  if (!stat.isSymbolicLink() && !stat.isFile()) {\n    return false\n  }\n  return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n  fs.stat(path, function (er, stat) {\n    cb(er, er ? false : checkStat(stat, path, options))\n  })\n}\n\nfunction sync (path, options) {\n  return checkStat(fs.statSync(path), path, options)\n}\n", "module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n  fs.stat(path, function (er, stat) {\n    cb(er, er ? false : checkStat(stat, options))\n  })\n}\n\nfunction sync (path, options) {\n  return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n  return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n  var mod = stat.mode\n  var uid = stat.uid\n  var gid = stat.gid\n\n  var myUid = options.uid !== undefined ?\n    options.uid : process.getuid && process.getuid()\n  var myGid = options.gid !== undefined ?\n    options.gid : process.getgid && process.getgid()\n\n  var u = parseInt('100', 8)\n  var g = parseInt('010', 8)\n  var o = parseInt('001', 8)\n  var ug = u | g\n\n  var ret = (mod & o) ||\n    (mod & g) && gid === myGid ||\n    (mod & u) && uid === myUid ||\n    (mod & ug) && myUid === 0\n\n  return ret\n}\n", "var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n  core = require('./windows.js')\n} else {\n  core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n  if (typeof options === 'function') {\n    cb = options\n    options = {}\n  }\n\n  if (!cb) {\n    if (typeof Promise !== 'function') {\n      throw new TypeError('callback not provided')\n    }\n\n    return new Promise(function (resolve, reject) {\n      isexe(path, options || {}, function (er, is) {\n        if (er) {\n          reject(er)\n        } else {\n          resolve(is)\n        }\n      })\n    })\n  }\n\n  core(path, options || {}, function (er, is) {\n    // ignore EACCES because that just means we aren't allowed to run it\n    if (er) {\n      if (er.code === 'EACCES' || options && options.ignoreErrors) {\n        er = null\n        is = false\n      }\n    }\n    cb(er, is)\n  })\n}\n\nfunction sync (path, options) {\n  // my kingdom for a filtered catch\n  try {\n    return core.sync(path, options || {})\n  } catch (er) {\n    if (options && options.ignoreErrors || er.code === 'EACCES') {\n      return false\n    } else {\n      throw er\n    }\n  }\n}\n", "const isWindows = process.platform === 'win32' ||\n    process.env.OSTYPE === 'cygwin' ||\n    process.env.OSTYPE === 'msys'\n\nconst path = require('path')\nconst COLON = isWindows ? ';' : ':'\nconst isexe = require('isexe')\n\nconst getNotFoundError = (cmd) =>\n  Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, opt) => {\n  const colon = opt.colon || COLON\n\n  // If it has a slash, then we don't bother searching the pathenv.\n  // just check the file itself, and that's it.\n  const pathEnv = cmd.match(/\\//) || isWindows && cmd.match(/\\\\/) ? ['']\n    : (\n      [\n        // windows always checks the cwd first\n        ...(isWindows ? [process.cwd()] : []),\n        ...(opt.path || process.env.PATH ||\n          /* istanbul ignore next: very unusual */ '').split(colon),\n      ]\n    )\n  const pathExtExe = isWindows\n    ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'\n    : ''\n  const pathExt = isWindows ? pathExtExe.split(colon) : ['']\n\n  if (isWindows) {\n    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n      pathExt.unshift('')\n  }\n\n  return {\n    pathEnv,\n    pathExt,\n    pathExtExe,\n  }\n}\n\nconst which = (cmd, opt, cb) => {\n  if (typeof opt === 'function') {\n    cb = opt\n    opt = {}\n  }\n  if (!opt)\n    opt = {}\n\n  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n  const found = []\n\n  const step = i => new Promise((resolve, reject) => {\n    if (i === pathEnv.length)\n      return opt.all && found.length ? resolve(found)\n        : reject(getNotFoundError(cmd))\n\n    const ppRaw = pathEnv[i]\n    const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n    const pCmd = path.join(pathPart, cmd)\n    const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n      : pCmd\n\n    resolve(subStep(p, i, 0))\n  })\n\n  const subStep = (p, i, ii) => new Promise((resolve, reject) => {\n    if (ii === pathExt.length)\n      return resolve(step(i + 1))\n    const ext = pathExt[ii]\n    isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {\n      if (!er && is) {\n        if (opt.all)\n          found.push(p + ext)\n        else\n          return resolve(p + ext)\n      }\n      return resolve(subStep(p, i, ii + 1))\n    })\n  })\n\n  return cb ? step(0).then(res => cb(null, res), cb) : step(0)\n}\n\nconst whichSync = (cmd, opt) => {\n  opt = opt || {}\n\n  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n  const found = []\n\n  for (let i = 0; i < pathEnv.length; i ++) {\n    const ppRaw = pathEnv[i]\n    const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n    const pCmd = path.join(pathPart, cmd)\n    const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n      : pCmd\n\n    for (let j = 0; j < pathExt.length; j ++) {\n      const cur = p + pathExt[j]\n      try {\n        const is = isexe.sync(cur, { pathExt: pathExtExe })\n        if (is) {\n          if (opt.all)\n            found.push(cur)\n          else\n            return cur\n        }\n      } catch (ex) {}\n    }\n  }\n\n  if (opt.all && found.length)\n    return found\n\n  if (opt.nothrow)\n    return null\n\n  throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n", "'use strict';\n\nconst pathKey = (options = {}) => {\n\tconst environment = options.env || process.env;\n\tconst platform = options.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n};\n\nmodule.exports = pathKey;\n// TODO: Remove this for the next major release\nmodule.exports.default = pathKey;\n", "'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst getPathKey = require('path-key');\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n    const env = parsed.options.env || process.env;\n    const cwd = process.cwd();\n    const hasCustomCwd = parsed.options.cwd != null;\n    // Worker threads do not have process.chdir()\n    const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;\n\n    // If a custom `cwd` was specified, we need to change the process cwd\n    // because `which` will do stat calls but does not support a custom cwd\n    if (shouldSwitchCwd) {\n        try {\n            process.chdir(parsed.options.cwd);\n        } catch (err) {\n            /* Empty */\n        }\n    }\n\n    let resolved;\n\n    try {\n        resolved = which.sync(parsed.command, {\n            path: env[getPathKey({ env })],\n            pathExt: withoutPathExt ? path.delimiter : undefined,\n        });\n    } catch (e) {\n        /* Empty */\n    } finally {\n        if (shouldSwitchCwd) {\n            process.chdir(cwd);\n        }\n    }\n\n    // If we successfully resolved, ensure that an absolute path is returned\n    // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n    if (resolved) {\n        resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n    }\n\n    return resolved;\n}\n\nfunction resolveCommand(parsed) {\n    return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n", "'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n    // Escape meta chars\n    arg = arg.replace(metaCharsRegExp, '^$1');\n\n    return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n    // Convert to string\n    arg = `${arg}`;\n\n    // Algorithm below is based on https://qntm.org/cmd\n\n    // Sequence of backslashes followed by a double quote:\n    // double up all the backslashes and escape the double quote\n    arg = arg.replace(/(\\\\*)\"/g, '$1$1\\\\\"');\n\n    // Sequence of backslashes followed by the end of the string\n    // (which will become a double quote later):\n    // double up all the backslashes\n    arg = arg.replace(/(\\\\*)$/, '$1$1');\n\n    // All other backslashes occur literally\n\n    // Quote the whole thing:\n    arg = `\"${arg}\"`;\n\n    // Escape meta chars\n    arg = arg.replace(metaCharsRegExp, '^$1');\n\n    // Double escape meta chars if necessary\n    if (doubleEscapeMetaChars) {\n        arg = arg.replace(metaCharsRegExp, '^$1');\n    }\n\n    return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n", "'use strict';\nmodule.exports = /^#!(.*)/;\n", "'use strict';\nconst shebangRegex = require('shebang-regex');\n\nmodule.exports = (string = '') => {\n\tconst match = string.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst [path, argument] = match[0].replace(/#! ?/, '').split(' ');\n\tconst binary = path.split('/').pop();\n\n\tif (binary === 'env') {\n\t\treturn argument;\n\t}\n\n\treturn argument ? `${binary} ${argument}` : binary;\n};\n", "'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n    // Read the first 150 bytes from the file\n    const size = 150;\n    const buffer = Buffer.alloc(size);\n\n    let fd;\n\n    try {\n        fd = fs.openSync(command, 'r');\n        fs.readSync(fd, buffer, 0, size, 0);\n        fs.closeSync(fd);\n    } catch (e) { /* Empty */ }\n\n    // Attempt to extract shebang (null is returned if not a shebang)\n    return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n", "'use strict';\n\nconst path = require('path');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\nfunction detectShebang(parsed) {\n    parsed.file = resolveCommand(parsed);\n\n    const shebang = parsed.file && readShebang(parsed.file);\n\n    if (shebang) {\n        parsed.args.unshift(parsed.file);\n        parsed.command = shebang;\n\n        return resolveCommand(parsed);\n    }\n\n    return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n    if (!isWin) {\n        return parsed;\n    }\n\n    // Detect & add support for shebangs\n    const commandFile = detectShebang(parsed);\n\n    // We don't need a shell if the command filename is an executable\n    const needsShell = !isExecutableRegExp.test(commandFile);\n\n    // If a shell is required, use cmd.exe and take care of escaping everything correctly\n    // Note that `forceShell` is an hidden option used only in tests\n    if (parsed.options.forceShell || needsShell) {\n        // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n        // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n        // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n        // we need to double escape them\n        const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n        // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n        // This is necessary otherwise it will always fail with ENOENT in those cases\n        parsed.command = path.normalize(parsed.command);\n\n        // Escape command & arguments\n        parsed.command = escape.command(parsed.command);\n        parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n        const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n        parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n        parsed.command = process.env.comspec || 'cmd.exe';\n        parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n    }\n\n    return parsed;\n}\n\nfunction parse(command, args, options) {\n    // Normalize arguments, similar to nodejs\n    if (args && !Array.isArray(args)) {\n        options = args;\n        args = null;\n    }\n\n    args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n    options = Object.assign({}, options); // Clone object to avoid changing the original\n\n    // Build our parsed object\n    const parsed = {\n        command,\n        args,\n        options,\n        file: undefined,\n        original: {\n            command,\n            args,\n        },\n    };\n\n    // Delegate further parsing to shell or non-shell\n    return options.shell ? parsed : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n", "'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n    return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n        code: 'ENOENT',\n        errno: 'ENOENT',\n        syscall: `${syscall} ${original.command}`,\n        path: original.command,\n        spawnargs: original.args,\n    });\n}\n\nfunction hookChildProcess(cp, parsed) {\n    if (!isWin) {\n        return;\n    }\n\n    const originalEmit = cp.emit;\n\n    cp.emit = function (name, arg1) {\n        // If emitting \"exit\" event and exit code is 1, we need to check if\n        // the command exists and emit an \"error\" instead\n        // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n        if (name === 'exit') {\n            const err = verifyENOENT(arg1, parsed, 'spawn');\n\n            if (err) {\n                return originalEmit.call(cp, 'error', err);\n            }\n        }\n\n        return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n    };\n}\n\nfunction verifyENOENT(status, parsed) {\n    if (isWin && status === 1 && !parsed.file) {\n        return notFoundError(parsed.original, 'spawn');\n    }\n\n    return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n    if (isWin && status === 1 && !parsed.file) {\n        return notFoundError(parsed.original, 'spawnSync');\n    }\n\n    return null;\n}\n\nmodule.exports = {\n    hookChildProcess,\n    verifyENOENT,\n    verifyENOENTSync,\n    notFoundError,\n};\n", "'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n    // Parse the arguments\n    const parsed = parse(command, args, options);\n\n    // Spawn the child process\n    const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n    // Hook into child process \"exit\" event to emit an error if the command\n    // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n    enoent.hookChildProcess(spawned, parsed);\n\n    return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n    // Parse the arguments\n    const parsed = parse(command, args, options);\n\n    // Spawn the child process\n    const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n    // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n    result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n    return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n", "import { createDevTools, type DevToolsSys } from \"@khulnasoft.com/dev-tools/core\";\nimport { createDevToolsNodeSys } from \"@khulnasoft.com/dev-tools/node\";\nimport { createDevToolsServer } from \"@khulnasoft.com/dev-tools/server\";\nimport mri from \"mri\";\nimport { runFigmaCommand } from \"./figma\";\nimport * as Amplitude from \"@amplitude/analytics-node\";\nimport { cancel } from \"@clack/prompts\";\nimport { addCommand } from \"./khulnasoft-add/interface\";\nimport { getOptions } from \"./khulnasoft-add/options\";\nimport { setupSyncServer, syncCommand } from \"./sync-utils\";\nimport { exit } from \"./exit\";\nimport { initTracking } from \"./track\";\nimport * as Sentry from \"@sentry/node\";\nimport { printHelp } from \"./help\";\nimport { runCodeCommand } from \"./code\";\n\nexport interface CLIArgs {\n  /** Khulnasoft.com private API key */\n  privateKey?: string;\n  /** Figma access token */\n  figmaToken?: string;\n  /** Run in CI mode without interactive prompts */\n  ci?: boolean;\n  /** Show help text */\n  help?: boolean;\n  /** Force operation even if there are warnings */\n  force?: boolean;\n  /** Print output as JSON */\n  printJson?: boolean;\n  /** Run in dry-run mode without making changes */\n  dryrun?: boolean;\n  /** Auto-confirm all prompts */\n  yes?: boolean;\n  /** Khulnasoft.com space ID */\n  spaceId?: string;\n  /** Skip package installation step */\n  skipInstallation?: boolean;\n  /** Url to start from */\n  url?: string;\n  /** Prompt text for non-interactive mode */\n  prompt?: string;\n  /** Generation mode - either 'exact' for precise matches or 'creative' for more flexibility */\n  mode?: \"exact\" | \"creative\";\n  /** Working directory to run commands from */\n  cwd?: string;\n  /** Raw command line arguments */\n  _: string[];\n}\n\nasync function setupDevTools(sys: DevToolsSys) {\n  sys.debug(\"khulnasoft dev tools cli init\");\n  const devTools = await createDevTools(sys);\n\n  await createDevToolsServer({\n    ...devTools,\n\n    getClientId: () => \"khulnasoft-dev-tools-cli\",\n\n    closeAppServer: async () => {},\n\n    restartAppServer: async () => {\n      sys.debug(\"restart server\");\n    },\n\n    enableAppWatch: async (enable) => {\n      return enable;\n    },\n\n    ...sys,\n  });\n}\nconst handleSigTerm = async () => {\n  await Amplitude.flush().promise;\n  process.exit(0);\n};\n\nprocess.on(\"SIGINT\", handleSigTerm);\nprocess.on(\"SIGTERM\", handleSigTerm);\n\nasync function main() {\n  await initTracking();\n\n  try {\n    const args = mri<CLIArgs>(process.argv.slice(2), {\n      string: [\n        \"figmaToken\",\n        \"privateKey\",\n        \"spaceId\",\n        \"cwd\",\n        \"prompt\",\n        \"mode\",\n        \"url\",\n      ],\n      boolean: [\n        \"help\",\n        \"ci\",\n        \"force\",\n        \"printJson\",\n        \"dryrun\",\n        \"yes\",\n        \"skipInstallation\",\n      ],\n    });\n\n    if (args.help) {\n      printHelp(args._[args._.length - 1]);\n      return await exit(0);\n    }\n\n    const rootCommand = args._[0];\n    if (args.cwd) {\n      console.log(\"changing cwd\", args.cwd);\n      process.chdir(args.cwd);\n    }\n    const sys = await createDevToolsNodeSys({\n      cwd: process.cwd(),\n      ignoreMissingConfig: true,\n    });\n    if (rootCommand === \"figma\") {\n      const subCommand = args._[1];\n      try {\n        await runFigmaCommand(sys, subCommand, args);\n      } catch (error) {\n        Sentry.captureException(error);\n        console.error(error);\n        return await exit(1);\n      }\n    } else if (rootCommand === \"code\") {\n      const subCommand = args._[1];\n      try {\n        await runCodeCommand(sys, subCommand, args);\n      } catch (error) {\n        Sentry.captureException(error);\n        console.error(error);\n        return await exit(1);\n      }\n    } else if (rootCommand === \"add\") {\n      const opts = getOptions(process.cwd(), process.argv.slice(2));\n      await addCommand(opts);\n    } else if (rootCommand === \"sync\") {\n      const opts = getOptions(process.cwd(), process.argv.slice(2));\n      const initialSyncInfo = await syncCommand(opts);\n      setupSyncServer(sys, initialSyncInfo)\n        .then(() => {\n          console.info(\"Khulnasoft dev tools is running\");\n        })\n        .catch((error) => {\n          Sentry.captureException(error);\n          console.error(\"Cannot start khulnasoft dev tools\", error);\n        });\n    } else if (rootCommand === \"help\") {\n      printHelp(args._[1]);\n      return await exit(0);\n    } else if (\n      rootCommand === \"publish\" ||\n      rootCommand === \"migrate\" ||\n      rootCommand === \"generate\"\n    ) {\n      cancel(\n        \"Command not found, do you mean `npx khulnasoft.com figma \" +\n          rootCommand +\n          \"`?\"\n      );\n      return await exit(1);\n    } else {\n      // Using cli to run dev tools dev server. This is used in angular\n      setupDevTools(sys)\n        .then(() => {\n          console.info(\"Khulnasoft dev tools is running\");\n        })\n        .catch((error) => {\n          Sentry.captureException(error);\n          console.error(\"Cannot start khulnasoft dev tools\", error);\n        });\n    }\n  } catch (error) {\n    Sentry.captureException(error);\n    console.error(error);\n    return await exit(1);\n  }\n}\n\nmain();\n", "import type { CLIArgs } from \"./index\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport { prettierFormat } from \"./prettier\";\nimport { getCredentials } from \"./credentials\";\nimport type { DevToolsSys } from \"../types\";\nimport { findAllMappingFiles, type FigmaKhulnasoftLink } from \"./figma-publish\";\nimport {\n  cancel,\n  intro,\n  isCancel,\n  outro,\n  spinner,\n  text,\n  log,\n  confirm,\n} from \"@clack/prompts\";\nimport { getFigmaComponentName } from \"./generate\";\nimport {\n  bold,\n  bgCyan,\n  dim,\n  yellow,\n  cyan,\n  green,\n  bgGreen,\n  white,\n  magenta,\n} from \"picocolors\";\nimport { extname, isAbsolute, relative } from \"path\";\nimport { exit } from \"./exit\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\n\ninterface KVGetRequest {\n  privateKey: string;\n  spaceId: string;\n}\n\nconst apiHost = \"https://cdn.khulnasoft.com\";\n\nexport const runFigmaMigrate = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma migrate \"))) + `  ` + dim(VERSION));\n\n  const { khulnasoftPrivateKey: privateKey, khulnasoftPublicKey: spaceId } =\n    await getCredentials(sys, args, {\n      forceSpaceId: args.spaceId,\n      khulnasoftPrivateKey: true,\n      khulnasoftPublicKey: true,\n    });\n\n  track(\"figma publish started\", {\n    spaceId,\n  });\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  if (mappingFiles.length > 0) {\n    track(\"figma migrate with existing files\", {\n      spaceId,\n    });\n    log.warning(\n      `${yellow(\"This repo already has figma mappings in:\")}\\n\n${mappingFiles.map((a) => ` - ${relative(sys.getAppRootDir(), a)}`).join(\"\\n\")}\n\nMigration is going to create new files, possibly duplicates.`\n    );\n    const shouldContinue = await confirm({\n      message: \"Do you want to continue?\",\n      initialValue: false,\n    });\n    if (!shouldContinue || isCancel(shouldContinue)) {\n      cancel(\"Migration cancelled\");\n      return await exit(1);\n    }\n  }\n\n  log.message(\n    `We are about to import your existing figma mappings into this local repo.`\n  );\n\n  let s = spinner();\n  s.start(\"Fetching figma mappings\");\n  const links = await getKhulnasoftSpaceFigmaLinks({\n    privateKey: privateKey!,\n    spaceId: spaceId!,\n  });\n\n  s.stop(`Fetched ${links.length} figma mappings:`);\n  log.message(\n    links\n      .map((l) => {\n        switch (l.figmaKey) {\n          // add icon\n          case \"design-tokens\":\n            return cyan(`\u2747\uFE0E Design tokens mapper`);\n          case \"*\": // generic mapper\n            return yellow(`\u25CF Generic mapper`);\n          default:\n            return `${magenta(\n              \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName)\n            )} ${dim(\"\u2192\")} ${l.khulnasoftName}`;\n        }\n      })\n      .join(\"\\n\")\n  );\n\n  const mappingsDir = await text({\n    message: `Where do you want to save the figma mappings? ${dim(\n      \"(Ctrl+C to exit)\"\n    )}`,\n    initialValue: \"./src/mappings\",\n    defaultValue: \"./src/mappings\",\n    placeholder: \"./src/mappings\",\n    validate: (value) => {\n      if (extname(value) !== \"\") {\n        return \"It must be a valid directory path, not a file\";\n      }\n      if (isAbsolute(value)) {\n        return \"It must be a relative path\";\n      }\n    },\n  });\n  if (isCancel(mappingsDir)) {\n    cancel(\"Migration cancelled\");\n    return await exit(1);\n  }\n\n  await mkdir(mappingsDir, { recursive: true });\n\n  await Promise.all(\n    links.map(async (link) => {\n      const tsSource = await convertFigmaKhulnasoftLinkToMapping(link);\n      let fileName;\n      switch (link.figmaKey) {\n        case \"design-tokens\":\n          fileName = \"design-tokens\";\n          break;\n        case \"*\":\n          fileName = \"generic\";\n          break;\n        default:\n          fileName = getFigmaComponentName(link.figmaName);\n      }\n      const filePath = mappingsDir + \"/\" + fileName + \".mapper.tsx\";\n      log.info(green(\"created \") + dim(filePath));\n      return writeFile(filePath, tsSource);\n    })\n  );\n  log.info(\n    \"Check out the docs for following steps: https://khulnasoft.com/docs/figma/figma-mappings\"\n  );\n  outro(\n    bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))) + ` ${links.length} mappings imported`\n  );\n\n  track(\"figma migrate success\", {\n    spaceId,\n    mappingFiles: links.length,\n  });\n};\n\nexport async function getKhulnasoftSpaceFigmaLinks(kvReq: KVGetRequest) {\n  const rsp = await safeFetch(\n    `${apiHost}/api/internal/kv/${kvReq.spaceId}/figma-khulnasoft?apiKey=${kvReq.spaceId}`,\n    {\n      headers: {\n        Authorization: `Bearer ${kvReq.privateKey}`,\n      },\n    }\n  );\n\n  if (!rsp.ok) {\n    throw new Error(`Failed to fetch figma-khulnasoft links: ${rsp.statusText}`);\n  }\n\n  const result = await rsp.json();\n\n  if (!(result instanceof Object && \"figmaKhulnasoftLinks\" in result)) {\n    throw new Error(\"Invalid response\");\n  }\n\n  return result.figmaKhulnasoftLinks as FigmaKhulnasoftLink[];\n}\n\nasync function convertFigmaKhulnasoftLinkToMapping(link: FigmaKhulnasoftLink) {\n  // TODO: get TS type for arg\n  const fn = \"figmaMapping\",\n    arg = link.originalInputMapper?.match(\n      /function Mapper\\(\\s*([a-zA-Z0-9_$]+)\\s*(?::[^)])?\\s*\\)/\n    )?.[1],\n    body = link.originalInputMapper?.match(\n      /function Mapper\\([^)]*\\)(\\s*{([^]*))$/\n    )?.[1];\n\n  let src;\n  switch (link.figmaKey) {\n    case \"design-tokens\":\n      src = `${fn}({\n  designTokenMapper(${arg || \"designToken\"})${body}\n})`;\n      break;\n    case \"*\":\n      src = `${fn}({\n  genericMapper(${arg || \"figma\"})${body}\n})`;\n      break;\n    default:\n      src = `${fn}({${\n        link.figmaUrl ? `\\n  url: ${JSON.stringify(link.figmaUrl)},` : \"\"\n      }\n  componentKey: ${JSON.stringify(link.figmaKey)}${\n        body ? `,\\n  mapper(${arg || \"figma\"})${body}` : \"\"\n      }\n})`;\n  }\n\n  return prettierFormat(\n    `import { figmaMapping } from '@khulnasoft.com/dev-tools/figma';\n${componentImportLine(link)}\n\n${src}`,\n    \"typescript\",\n    undefined\n  );\n}\n\nfunction componentImportLine(link: FigmaKhulnasoftLink) {\n  const { exportType, importName, importPath } = link;\n  if (importName && importPath) {\n    const path = JSON.stringify(importPath);\n    if (exportType === \"named\") {\n      return `import { ${importName} } from ${path};`;\n    } else {\n      return `import ${importName} from ${path};`;\n    }\n  }\n  return \"\";\n}\n\ndeclare const VERSION: string;\n", "import prettier from \"prettier\";\n\nexport async function prettierFormat(\n  code: string,\n  parser?: string,\n  filePath?: string\n) {\n  try {\n    const configFile = await prettier.resolveConfigFile(process.cwd());\n    if (configFile) {\n      const config = await prettier.resolveConfig(configFile);\n      const formattedCode = await prettier.format(code, {\n        ...config,\n        filepath: filePath,\n        parser,\n      });\n      return formattedCode;\n    } else {\n      const formattedCode = await prettier.format(code, {\n        filepath: filePath,\n        parser,\n      });\n      return formattedCode;\n    }\n  } catch (error) {\n    console.warn(\"Error formatting code\", error);\n    return code;\n  }\n}\n", "import { createServer, type Server } from \"http\";\nimport type { DevToolsSys } from \"../types\";\nimport {\n  KHULNASOFT_AUTH_RETURN_PATH,\n  FRAMEWORK_QS,\n  NODE_VERSION_QS,\n  PLATFORM_QS,\n} from \"../common/constants\";\nimport { platform } from \"os\";\nimport { join } from \"path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { cancel, isCancel, spinner } from \"@clack/prompts\";\nimport { confirm, log } from \"@clack/prompts\";\nimport { yellow, green } from \"picocolors\";\nimport type { CLIArgs } from \"./index\";\nimport * as Sentry from \"@sentry/node\";\nimport { setPublicKey } from \"./figma-publish\";\nimport { setUserId } from \"./track\";\nimport { randomUUID } from \"crypto\";\nimport { safeFetch } from \"./fetch\";\n\ndeclare const OAUTH_DONE_HTML: string;\n\nexport interface CredentialsOptions {\n  forceSpaceId?: string;\n  khulnasoftPublicKey?: boolean;\n  khulnasoftPrivateKey?: boolean;\n  figmaAuth?: boolean;\n  force?: boolean;\n}\n\nexport interface FigmaAuth {\n  access_token: string;\n  oauth: boolean;\n}\n\nexport interface KhulnasoftAuth {\n  privateKey: string;\n  spaceId: string;\n  spaceName: string;\n  userId: string;\n}\n\nexport interface Credentials {\n  figmaAuth?: FigmaAuth;\n  khulnasoftPublicKey?: string;\n  khulnasoftPrivateKey?: string;\n  spaceName?: string;\n  userId?: string;\n}\n\nexport const isCI = (args: CLIArgs) => {\n  if (process.env.CI) {\n    return true;\n  }\n  if (args.ci) {\n    return true;\n  }\n  return false;\n};\n\nexport interface Credentials {\n  figmaAuth?: FigmaAuth;\n  khulnasoftPublicKey?: string;\n  khulnasoftPrivateKey?: string;\n  spaceName?: string;\n  userId?: string;\n}\n\nexport const getCredentials = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  opts: CredentialsOptions\n): Promise<Credentials> => {\n  const storedCredentials = isCI(args) ? {} : loadCredentials(sys);\n\n  let spaceName: string | undefined = storedCredentials.spaceName;\n  let userId: string | undefined = storedCredentials.userId;\n  let figmaAuth: FigmaAuth | undefined;\n  let khulnasoftPublicKey: string | undefined =\n    process.env.KHULNASOFT_PUBLIC_KEY ??\n    args.spaceId ??\n    storedCredentials.khulnasoftPublicKey;\n  let khulnasoftPrivateKey: string | undefined =\n    process.env.KHULNASOFT_PRIVATE_KEY ??\n    args.privateKey ??\n    storedCredentials.khulnasoftPrivateKey;\n  const figmaPersonalToken =\n    process.env.FIGMA_PERSONAL_TOKEN ?? args.figmaToken;\n  if (figmaPersonalToken) {\n    figmaAuth = { access_token: figmaPersonalToken, oauth: false };\n  } else {\n    figmaAuth = storedCredentials.figmaAuth;\n  }\n  if (\n    opts.forceSpaceId &&\n    khulnasoftPublicKey &&\n    khulnasoftPublicKey !== opts.forceSpaceId\n  ) {\n    log.warning(\n      `CLI is currently logged in space ${yellow(\n        khulnasoftPublicKey\n      )},\\nhowever the command required --spaceId=${green(opts.forceSpaceId)}`\n    );\n    const confirmSwitch =\n      args.yes ||\n      (await confirm({\n        message: `Do you wanna switch spaces?`,\n        active: \"Yes\",\n        inactive: `Stay in current ${spaceName} space`,\n      }));\n    if (isCancel(confirmSwitch) || !confirmSwitch) {\n      cancel(\n        `Aborting. Another way to fix this conflict is making sure the figma plugin is logged in \"${spaceName}\" instead.`\n      );\n      throw new Error(\"Exiting\");\n    }\n    khulnasoftPublicKey = opts.forceSpaceId;\n    khulnasoftPrivateKey = undefined;\n    spaceName = undefined;\n    userId = undefined;\n  }\n\n  if (isCI(args)) {\n    if (!figmaAuth && opts.figmaAuth) {\n      throw new Error(\n        \"No Figma personal token found.\\nPlease set the FIGMA_PERSONAL_TOKEN environment variable.\"\n      );\n    }\n    if (!khulnasoftPrivateKey && opts.khulnasoftPrivateKey) {\n      throw new Error(\n        \"No Khulnasoft private key found.\\nPlease set the KHULNASOFT_PRIVATE_KEY environment variable.\"\n      );\n    }\n    if (!khulnasoftPublicKey && opts.khulnasoftPublicKey) {\n      throw new Error(\n        \"No Khulnasoft public key found.\\nPlease set the KHULNASOFT_PUBLIC_KEY environment variable.\"\n      );\n    }\n    return {\n      figmaAuth,\n      khulnasoftPublicKey,\n      khulnasoftPrivateKey,\n    };\n  }\n  if (opts.force || (!figmaAuth && opts.figmaAuth)) {\n    figmaAuth = await getFigmaAuth();\n    storeCredentials(sys, {\n      figmaAuth,\n    });\n  }\n  if (\n    opts.force ||\n    (!khulnasoftPrivateKey && opts.khulnasoftPrivateKey) ||\n    (!khulnasoftPublicKey && opts.khulnasoftPublicKey)\n  ) {\n    const {\n      privateKey,\n      spaceId,\n      spaceName: name,\n      userId: uId,\n    } = await getKhulnasoftAuth(sys, opts.forceSpaceId);\n    if (opts.forceSpaceId && spaceId !== opts.forceSpaceId) {\n      throw new Error(\n        `OAuth flow returned space ${yellow(\n          spaceId\n        )}, however the command required --spaceId=${green(opts.forceSpaceId)}`\n      );\n    }\n    khulnasoftPublicKey = spaceId;\n    khulnasoftPrivateKey = privateKey;\n    spaceName = name;\n    userId = uId;\n    await setUserId(userId);\n    await setPublicKey(sys, spaceId, undefined, false);\n    storeCredentials(sys, {\n      khulnasoftPublicKey,\n      khulnasoftPrivateKey,\n      spaceName,\n      userId,\n    });\n  }\n\n  if (userId) {\n    Sentry.setUser({\n      id: userId,\n      username: process.env.USER || process.env.USERNAME || \"unknown\",\n    });\n  }\n  if (spaceName || khulnasoftPublicKey) {\n    Sentry.setContext(\"khulnasoft\", {\n      spaceId: khulnasoftPublicKey,\n      spaceName,\n    });\n  }\n  return { figmaAuth, khulnasoftPublicKey, khulnasoftPrivateKey, spaceName, userId };\n};\n\nconst SECRET = \"RHr2ed743waC2g2ZHMEJSn6O0NQ08L\";\nexport async function getFigmaAuth(): Promise<FigmaAuth> {\n  const s = spinner();\n  const { default: open } = await import(\"open\");\n  s.start(\"Waiting for Figma auth\");\n\n  // http://localhost:5273/figma-connect\n  const randomState = randomUUID();\n  const url = new URL(\"https://www.figma.com/oauth\");\n  url.searchParams.set(\"client_id\", \"nrGCqw6TLl95QJhVDi097A\");\n  url.searchParams.set(\"redirect_uri\", \"http://localhost:5283/figma-connect\");\n  url.searchParams.set(\n    \"scope\",\n    \"files:read,file_dev_resources:read,file_variables:read\"\n  );\n  url.searchParams.set(\"state\", randomState);\n  url.searchParams.set(\"response_type\", \"code\");\n  let server: Server | undefined;\n  const promise = new Promise<FigmaAuth>((resolve, reject) => {\n    server = createServer(async (req, res) => {\n      const url = new URL(req.url || \"\", \"http://localhost:5283\");\n      if (url.pathname === \"/figma-connect\") {\n        const code = url.searchParams.get(\"code\");\n        const state = url.searchParams.get(\"state\");\n        if (code && randomState === state) {\n          const figmaRes = await safeFetch(\n            \"https://www.figma.com/api/oauth/token\",\n            {\n              method: \"POST\",\n              headers: {\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n              },\n              body: new URLSearchParams({\n                client_id: \"nrGCqw6TLl95QJhVDi097A\",\n                client_secret: SECRET,\n                redirect_uri: \"http://localhost:5283/figma-connect\",\n                code,\n                grant_type: \"authorization_code\",\n              }).toString(),\n            }\n          );\n          if (!figmaRes.ok) {\n            reject(new Error(\"Failed to get figma access token\"));\n          }\n          const data = await figmaRes.json();\n          res.end(\n            OAUTH_DONE_HTML.replace(\n              \"{{MESSAGE}}\",\n              \"The CLI has authenticated correctly with Figma\"\n            ),\n            () => {\n              resolve({\n                ...data,\n                oauth: true,\n              });\n            }\n          );\n        }\n      }\n    });\n    server.listen(5283, () => {\n      open(url.href, { wait: false });\n    });\n  });\n\n  try {\n    return await promise;\n  } finally {\n    s.stop(\"Authenticated with Figma\");\n    if (server) {\n      if (\"closeAllConnections\" in server) {\n        (server as any).closeAllConnections();\n      }\n      server.close((err) => {\n        if (err) {\n          Sentry.captureException(err);\n          console.error(err);\n        }\n      });\n    }\n  }\n}\n\nexport async function getKhulnasoftAuth(\n  sys: DevToolsSys,\n  preferSpaceId?: string\n): Promise<KhulnasoftAuth> {\n  const s = spinner();\n  s.start(\"Waiting for Khulnasoft auth\");\n  const { default: open } = await import(\"open\");\n\n  const authUrl = new URL(`/cli-auth`, `https://khulnasoft.com`);\n  authUrl.searchParams.set(`client_id`, \"khulnasoft-dev-tools-cli\");\n\n  authUrl.searchParams.set(`host`, await sys.getDeviceId());\n  authUrl.searchParams.set(`response_type`, `code`);\n  authUrl.searchParams.set(`cli`, `true`);\n  if (preferSpaceId) {\n    authUrl.searchParams.set(\"space_id\", preferSpaceId);\n  }\n\n  let server: Server | undefined;\n\n  const returnUrl = new URL(KHULNASOFT_AUTH_RETURN_PATH, \"http://localhost:5283\");\n  returnUrl.searchParams.set(PLATFORM_QS, platform());\n  returnUrl.searchParams.set(NODE_VERSION_QS, process.versions.node);\n\n  const frameworks = sys.getFrameworks();\n  if (frameworks.length > 0) {\n    authUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n    returnUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n  }\n  authUrl.searchParams.set(`redirect_url`, returnUrl.href);\n  const promise = new Promise<KhulnasoftAuth>((resolve) => {\n    server = createServer(async (req, res) => {\n      const url = new URL(req.url || \"\", \"http://localhost:5283\");\n      if (url.pathname === KHULNASOFT_AUTH_RETURN_PATH) {\n        res.end(\n          OAUTH_DONE_HTML.replace(\n            \"{{MESSAGE}}\",\n            \"The CLI has authenticated correctly with Khulnasoft.com\"\n          ),\n          () => {\n            resolve({\n              privateKey: url.searchParams.get(\"p-key\") || \"\",\n              spaceId: url.searchParams.get(\"api-key\") || \"\",\n              spaceName: url.searchParams.get(\"org-name\") || \"\",\n              userId: url.searchParams.get(\"user-id\") || \"\",\n            });\n          }\n        );\n      }\n    });\n    server.listen(5283, () => {\n      open(authUrl.href, { wait: false });\n    });\n  });\n  try {\n    return await promise;\n  } finally {\n    s.stop(\"Authenticated with Khulnasoft.com\");\n    if (server) {\n      if (\"closeAllConnections\" in server) {\n        (server as any).closeAllConnections();\n      }\n      server!.close((err) => {\n        if (err) {\n          Sentry.captureException(err);\n          console.error(err);\n        }\n      });\n    }\n  }\n}\n\n// export async function getKhulnasoftAuth(): Promise<{\n//   privateKey: string;\n//   publicKey: string;\n// }> {\n//   const { privateKey, publicKey } = await getKhulnasoftApiKey();\n//   return { privateKey, publicKey };\n// }\n\nfunction storeCredentials(sys: DevToolsSys, credentials: Credentials) {\n  const root = sys.getAppRootDir();\n  const dir = join(root, \"node_modules\", \".khulnasoft\");\n  const filepath = join(dir, \"data.json\");\n  if (existsSync(filepath)) {\n    try {\n      const data = readFileSync(filepath, \"utf8\");\n      const json = JSON.parse(data);\n      credentials = Object.assign(json.credentials, credentials);\n    } catch (e) {\n      Sentry.captureException(e);\n      console.error(\"Failed to store credentials\", e);\n    }\n  } else {\n    mkdirSync(dir, { recursive: true });\n  }\n  writeFileSync(filepath, JSON.stringify({ credentials }, null, 2));\n}\n\nfunction loadCredentials(sys: DevToolsSys): Credentials {\n  const root = sys.getAppRootDir();\n  const filepath = join(root, \"node_modules\", \".khulnasoft\", \"data.json\");\n  if (existsSync(filepath)) {\n    try {\n      const data = readFileSync(filepath, \"utf8\");\n      return JSON.parse(data).credentials;\n    } catch (e) {\n      Sentry.captureException(e);\n      console.error(\"Failed to load credentials\", e);\n    }\n  }\n  return {};\n}\n", "export const PUBLIC_API_KEY_QS = `api-key`;\nexport const PRIVATE_AUTH_KEY_QS = `p-key`;\nexport const PREVIEW_URL_QS = `preview-url`;\nexport const USER_ID_QS = `user-id`;\nexport const CONNECTED_USER_ID_QS = \"_b-uid\";\nexport const FRAMEWORK_QS = `framework`;\nexport const PLATFORM_QS = `platform`;\nexport const NODE_VERSION_QS = `node`;\n\nexport const KHULNASOFT_AUTH_CONNECT_PATH = \"/~khulnasoft-connect\";\nexport const KHULNASOFT_AUTH_RETURN_PATH = \"/~khulnasoft-connected\";\n\nexport const DEV_TOOLS_API_PATH = \"/~khulnasoft-dev-tools\";\nexport const DEV_TOOLS_CLIENT_SCRIPT_PATH = \"/~khulnasoft-dev-tools.js\";\nexport const DEV_TOOLS_SERVER_CLOSE_PATH = \"/~khulnasoft-dev-tools-close\";\n\nexport const AMPLITUDE_PROXY_URL =\n  \"https://cdn.khulnasoft.com/api/v1/proxy-api?url=https://api2.amplitude.com/2/httpapi\";\n\nexport const SPACE_KIND_QS = `kind`;\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "var eaw = {};\n\nif ('undefined' == typeof module) {\n  window.eastasianwidth = eaw;\n} else {\n  module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n  var x = character.charCodeAt(0);\n  var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n  var codePoint = x;\n  if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n    x &= 0x3FF;\n    y &= 0x3FF;\n    codePoint = (x << 10) | y;\n    codePoint += 0x10000;\n  }\n\n  if ((0x3000 == codePoint) ||\n      (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n      (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n    return 'F';\n  }\n  if ((0x20A9 == codePoint) ||\n      (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n      (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n      (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n      (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n      (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n      (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n    return 'H';\n  }\n  if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n      (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n      (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n      (0x2329 <= codePoint && codePoint <= 0x232A) ||\n      (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n      (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n      (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n      (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n      (0x3001 <= codePoint && codePoint <= 0x303E) ||\n      (0x3041 <= codePoint && codePoint <= 0x3096) ||\n      (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n      (0x3105 <= codePoint && codePoint <= 0x312D) ||\n      (0x3131 <= codePoint && codePoint <= 0x318E) ||\n      (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n      (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n      (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n      (0x3220 <= codePoint && codePoint <= 0x3247) ||\n      (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n      (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n      (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n      (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n      (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n      (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n      (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n      (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n      (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n      (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n      (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n      (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n      (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n      (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n      (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n      (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n      (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n      (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n      (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n      (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n      (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n    return 'W';\n  }\n  if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n      (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n      (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n      (0x00AC == codePoint) ||\n      (0x00AF == codePoint) ||\n      (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n      (0x2985 <= codePoint && codePoint <= 0x2986)) {\n    return 'Na';\n  }\n  if ((0x00A1 == codePoint) ||\n      (0x00A4 == codePoint) ||\n      (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n      (0x00AA == codePoint) ||\n      (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n      (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n      (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n      (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n      (0x00C6 == codePoint) ||\n      (0x00D0 == codePoint) ||\n      (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n      (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n      (0x00E6 == codePoint) ||\n      (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n      (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n      (0x00F0 == codePoint) ||\n      (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n      (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n      (0x00FC == codePoint) ||\n      (0x00FE == codePoint) ||\n      (0x0101 == codePoint) ||\n      (0x0111 == codePoint) ||\n      (0x0113 == codePoint) ||\n      (0x011B == codePoint) ||\n      (0x0126 <= codePoint && codePoint <= 0x0127) ||\n      (0x012B == codePoint) ||\n      (0x0131 <= codePoint && codePoint <= 0x0133) ||\n      (0x0138 == codePoint) ||\n      (0x013F <= codePoint && codePoint <= 0x0142) ||\n      (0x0144 == codePoint) ||\n      (0x0148 <= codePoint && codePoint <= 0x014B) ||\n      (0x014D == codePoint) ||\n      (0x0152 <= codePoint && codePoint <= 0x0153) ||\n      (0x0166 <= codePoint && codePoint <= 0x0167) ||\n      (0x016B == codePoint) ||\n      (0x01CE == codePoint) ||\n      (0x01D0 == codePoint) ||\n      (0x01D2 == codePoint) ||\n      (0x01D4 == codePoint) ||\n      (0x01D6 == codePoint) ||\n      (0x01D8 == codePoint) ||\n      (0x01DA == codePoint) ||\n      (0x01DC == codePoint) ||\n      (0x0251 == codePoint) ||\n      (0x0261 == codePoint) ||\n      (0x02C4 == codePoint) ||\n      (0x02C7 == codePoint) ||\n      (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n      (0x02CD == codePoint) ||\n      (0x02D0 == codePoint) ||\n      (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n      (0x02DD == codePoint) ||\n      (0x02DF == codePoint) ||\n      (0x0300 <= codePoint && codePoint <= 0x036F) ||\n      (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n      (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n      (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n      (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n      (0x0401 == codePoint) ||\n      (0x0410 <= codePoint && codePoint <= 0x044F) ||\n      (0x0451 == codePoint) ||\n      (0x2010 == codePoint) ||\n      (0x2013 <= codePoint && codePoint <= 0x2016) ||\n      (0x2018 <= codePoint && codePoint <= 0x2019) ||\n      (0x201C <= codePoint && codePoint <= 0x201D) ||\n      (0x2020 <= codePoint && codePoint <= 0x2022) ||\n      (0x2024 <= codePoint && codePoint <= 0x2027) ||\n      (0x2030 == codePoint) ||\n      (0x2032 <= codePoint && codePoint <= 0x2033) ||\n      (0x2035 == codePoint) ||\n      (0x203B == codePoint) ||\n      (0x203E == codePoint) ||\n      (0x2074 == codePoint) ||\n      (0x207F == codePoint) ||\n      (0x2081 <= codePoint && codePoint <= 0x2084) ||\n      (0x20AC == codePoint) ||\n      (0x2103 == codePoint) ||\n      (0x2105 == codePoint) ||\n      (0x2109 == codePoint) ||\n      (0x2113 == codePoint) ||\n      (0x2116 == codePoint) ||\n      (0x2121 <= codePoint && codePoint <= 0x2122) ||\n      (0x2126 == codePoint) ||\n      (0x212B == codePoint) ||\n      (0x2153 <= codePoint && codePoint <= 0x2154) ||\n      (0x215B <= codePoint && codePoint <= 0x215E) ||\n      (0x2160 <= codePoint && codePoint <= 0x216B) ||\n      (0x2170 <= codePoint && codePoint <= 0x2179) ||\n      (0x2189 == codePoint) ||\n      (0x2190 <= codePoint && codePoint <= 0x2199) ||\n      (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n      (0x21D2 == codePoint) ||\n      (0x21D4 == codePoint) ||\n      (0x21E7 == codePoint) ||\n      (0x2200 == codePoint) ||\n      (0x2202 <= codePoint && codePoint <= 0x2203) ||\n      (0x2207 <= codePoint && codePoint <= 0x2208) ||\n      (0x220B == codePoint) ||\n      (0x220F == codePoint) ||\n      (0x2211 == codePoint) ||\n      (0x2215 == codePoint) ||\n      (0x221A == codePoint) ||\n      (0x221D <= codePoint && codePoint <= 0x2220) ||\n      (0x2223 == codePoint) ||\n      (0x2225 == codePoint) ||\n      (0x2227 <= codePoint && codePoint <= 0x222C) ||\n      (0x222E == codePoint) ||\n      (0x2234 <= codePoint && codePoint <= 0x2237) ||\n      (0x223C <= codePoint && codePoint <= 0x223D) ||\n      (0x2248 == codePoint) ||\n      (0x224C == codePoint) ||\n      (0x2252 == codePoint) ||\n      (0x2260 <= codePoint && codePoint <= 0x2261) ||\n      (0x2264 <= codePoint && codePoint <= 0x2267) ||\n      (0x226A <= codePoint && codePoint <= 0x226B) ||\n      (0x226E <= codePoint && codePoint <= 0x226F) ||\n      (0x2282 <= codePoint && codePoint <= 0x2283) ||\n      (0x2286 <= codePoint && codePoint <= 0x2287) ||\n      (0x2295 == codePoint) ||\n      (0x2299 == codePoint) ||\n      (0x22A5 == codePoint) ||\n      (0x22BF == codePoint) ||\n      (0x2312 == codePoint) ||\n      (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n      (0x24EB <= codePoint && codePoint <= 0x254B) ||\n      (0x2550 <= codePoint && codePoint <= 0x2573) ||\n      (0x2580 <= codePoint && codePoint <= 0x258F) ||\n      (0x2592 <= codePoint && codePoint <= 0x2595) ||\n      (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n      (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n      (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n      (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n      (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n      (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n      (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n      (0x25CB == codePoint) ||\n      (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n      (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n      (0x25EF == codePoint) ||\n      (0x2605 <= codePoint && codePoint <= 0x2606) ||\n      (0x2609 == codePoint) ||\n      (0x260E <= codePoint && codePoint <= 0x260F) ||\n      (0x2614 <= codePoint && codePoint <= 0x2615) ||\n      (0x261C == codePoint) ||\n      (0x261E == codePoint) ||\n      (0x2640 == codePoint) ||\n      (0x2642 == codePoint) ||\n      (0x2660 <= codePoint && codePoint <= 0x2661) ||\n      (0x2663 <= codePoint && codePoint <= 0x2665) ||\n      (0x2667 <= codePoint && codePoint <= 0x266A) ||\n      (0x266C <= codePoint && codePoint <= 0x266D) ||\n      (0x266F == codePoint) ||\n      (0x269E <= codePoint && codePoint <= 0x269F) ||\n      (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n      (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n      (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n      (0x26E3 == codePoint) ||\n      (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n      (0x273D == codePoint) ||\n      (0x2757 == codePoint) ||\n      (0x2776 <= codePoint && codePoint <= 0x277F) ||\n      (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n      (0x3248 <= codePoint && codePoint <= 0x324F) ||\n      (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n      (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n      (0xFFFD == codePoint) ||\n      (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n      (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n      (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n      (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n      (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n      (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n      (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n    return 'A';\n  }\n\n  return 'N';\n};\n\neaw.characterLength = function(character) {\n  var code = this.eastAsianWidth(character);\n  if (code == 'F' || code == 'W' || code == 'A') {\n    return 2;\n  } else {\n    return 1;\n  }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n  return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n  var characters = stringToArray(string);\n  var len = 0;\n  for (var i = 0; i < characters.length; i++) {\n    len = len + this.characterLength(characters[i]);\n  }\n  return len;\n};\n\neaw.slice = function(text, start, end) {\n  textLen = eaw.length(text)\n  start = start ? start : 0;\n  end = end ? end : 1;\n  if (start < 0) {\n      start = textLen + start;\n  }\n  if (end < 0) {\n      end = textLen + end;\n  }\n  var result = '';\n  var eawLen = 0;\n  var chars = stringToArray(text);\n  for (var i = 0; i < chars.length; i++) {\n    var char = chars[i];\n    var charLen = eaw.length(char);\n    if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n        if (eawLen + charLen <= end) {\n            result += char;\n        } else {\n            break;\n        }\n    }\n    eawLen += charLen;\n  }\n  return result;\n};\n", "\"use strict\";\n\nmodule.exports = function () {\n  // https://mths.be/emoji\n  return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n", "import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), '  ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "import type { Key, ReadLine } from 'node:readline';\n\nimport { stdin, stdout } from 'node:process';\nimport readline from 'node:readline';\nimport { Readable, Writable } from 'node:stream';\nimport { WriteStream } from 'node:tty';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nfunction diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n\nconst cancel = Symbol('clack:cancel');\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === cancel;\n}\n\nfunction setRawMode(input: Readable, value: boolean) {\n\tif ((input as typeof stdin).isTTY) (input as typeof stdin).setRawMode(value);\n}\n\nconst aliases = new Map([\n\t['k', 'up'],\n\t['j', 'down'],\n\t['h', 'left'],\n\t['l', 'right'],\n]);\nconst keys = new Set(['up', 'down', 'left', 'right', 'space', 'enter']);\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | void;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | void) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n}\n\nexport type State = 'initial' | 'active' | 'cancel' | 'submit' | 'error';\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate rl!: ReadLine;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _track: boolean = false;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | void;\n\tprotected _cursor: number = 0;\n\n\tpublic state: State = 'initial';\n\tpublic value: any;\n\tpublic error: string = '';\n\n\tconstructor(\n\t\t{ render, input = stdin, output = stdout, ...opts }: PromptOptions<Prompt>,\n\t\ttrackValue: boolean = true\n\t) {\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\tpublic prompt() {\n\t\tconst sink = new WriteStream(0);\n\t\tsink._write = (chunk, encoding, done) => {\n\t\t\tif (this._track) {\n\t\t\t\tthis.value = this.rl.line.replace(/\\t/g, '');\n\t\t\t\tthis._cursor = this.rl.cursor;\n\t\t\t\tthis.emit('value', this.value);\n\t\t\t}\n\t\t\tdone();\n\t\t};\n\t\tthis.input.pipe(sink);\n\n\t\tthis.rl = readline.createInterface({\n\t\t\tinput: this.input,\n\t\t\toutput: sink,\n\t\t\ttabSize: 2,\n\t\t\tprompt: '',\n\t\t\tescapeCodeTimeout: 50,\n\t\t});\n\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\tthis.rl.prompt();\n\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t}\n\n\t\tthis.input.on('keypress', this.onKeypress);\n\t\tsetRawMode(this.input, true);\n\t\tthis.output.on('resize', this.render);\n\n\t\tthis.render();\n\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(cancel);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tpublic on(event: string, cb: (...args: any) => any) {\n\t\tconst arr = this.subscribers.get(event) ?? [];\n\t\tarr.push({ cb });\n\t\tthis.subscribers.set(event, arr);\n\t}\n\tpublic once(event: string, cb: (...args: any) => any) {\n\t\tconst arr = this.subscribers.get(event) ?? [];\n\t\tarr.push({ cb, once: true });\n\t\tthis.subscribers.set(event, arr);\n\t}\n\tpublic emit(event: string, ...data: any[]) {\n\t\tconst cbs = this.subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\tprivate unsubscribe() {\n\t\tthis.subscribers.clear();\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name && !this._track && aliases.has(key.name)) {\n\t\t\tthis.emit('cursor', aliases.get(key.name));\n\t\t}\n\t\tif (key?.name && keys.has(key.name)) {\n\t\t\tthis.emit('cursor', key.name);\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\t\tif (char === '\\x03') {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl.close();\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate _prevFrame = '';\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t} else if (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n", "import { cursor } from 'sisteransi';\nimport Prompt, { PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = opts.initialValue ? true : false;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n", "import Prompt, { PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor: number = 0;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor: number = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor: number = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n", "import Prompt, { PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor: number = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t\tthis.valueWithCursor = this.value;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.value}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.value.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import type { Key } from 'node:readline';\n\nimport { stdin, stdout } from 'node:process';\nimport * as readline from 'node:readline';\nimport { cursor } from 'sisteransi';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name }: Key) => {\n\t\tconst str = String(data);\n\t\tif (str === '\\x03') {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tlet dx = name === 'return' ? 0 : -1;\n\t\tlet dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/natemoo-re/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import {\n\tblock,\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tisCancel,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\tState,\n\tTextPrompt\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Infinity;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | void;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)}  ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)}  ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? '\\n' + color.gray(S_BAR) : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | void;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)}  ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)}  ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? '\\n' + color.gray(S_BAR) : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\ntype Option<Value> = Value extends Primitive\n\t? { value: Value; label?: string; hint?: string }\n\t: { value: Value; label: string; hint?: string };\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t} else if (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t} else if (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value)!,\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t} else if (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t} else if (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t} else if (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t} else if (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tlet title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)}  ${color.yellow(ln)}` : `   ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttitle +\n\t\t\t\t\t\tcolor.yellow(S_BAR) +\n\t\t\t\t\t\t'  ' +\n\t\t\t\t\t\tlimitOptions({\n\t\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)}  `) +\n\t\t\t\t\t\t'\\n' +\n\t\t\t\t\t\tfooter +\n\t\t\t\t\t\t'\\n'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? `${isLast ? S_BAR_END : S_BAR} ` : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t} else if (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t} else if (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t} else if (state === 'selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t} else if (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t} else if (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t} else if (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(prefix)}${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tlet title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)}  ${color.yellow(ln)}` : `   ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)}  `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nconst strip = (str: string) => str.replace(ansiRegex(), '');\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tln = strip(ln);\n\t\t\t\treturn ln.length > sum ? ln.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)}  ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)}  ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)}  ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)}  ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)}  ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol}  ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)}  ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport const spinner = () => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive: boolean = false;\n\tlet _message: string = '';\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst start = (msg: string = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = msg.replace(/\\.+$/, '');\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet dotsTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\t\t\tconst loadingDots = '.'.repeat(Math.floor(dotsTimer)).slice(0, 3);\n\t\t\tprocess.stdout.write(cursor.move(-999, 0));\n\t\t\tprocess.stdout.write(erase.down(1));\n\t\t\tprocess.stdout.write(`${frame}  ${_message}${loadingDots}`);\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tdotsTimer = dotsTimer < frames.length ? dotsTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg: string = '', code: number = 0): void => {\n\t\t_message = msg ?? _message;\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t: color.red(S_STEP_ERROR);\n\t\tprocess.stdout.write(cursor.move(-999, 0));\n\t\tprocess.stdout.write(erase.down(1));\n\t\tprocess.stdout.write(`${step}  ${_message}\\n`);\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg: string = ''): void => {\n\t\t_message = msg ?? _message;\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\n// Adapted from https://github.com/chalk/ansi-regex\n// @see LICENSE\nfunction ansiRegex() {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, 'g');\n}\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => void | Promise<T[P] | void>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n", "import ts from \"typescript\";\nimport type { DevTools, DevToolsSys, ExportType, RepoInfo } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport { getCredentials, isCI, type FigmaAuth } from \"./credentials\";\nimport * as Sentry from \"@sentry/node\";\n\nimport {\n  cancel,\n  confirm,\n  intro,\n  isCancel,\n  log,\n  outro,\n  spinner,\n} from \"@clack/prompts\";\n\nimport {\n  bold,\n  bgCyan,\n  dim,\n  yellow,\n  cyan,\n  bgGreen,\n  red,\n  white,\n  magenta,\n  bgRed,\n  bgBlack,\n} from \"picocolors\";\nimport {\n  getFigmaComponentName,\n  getFigmaNodeData,\n  parseFigmaURL,\n} from \"./generate\";\nimport { createTsProgram } from \"../common/typescript\";\nimport { createDevTools } from \"../core\";\nimport { common, createEmphasize } from \"emphasize\";\nimport { exit } from \"./exit\";\nimport { apiAirV2Host } from \"./constants\";\nimport { isMapperFile } from \"../common/utils\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\n\nexport interface FigmaKhulnasoftLink {\n  khulnasoftName: string;\n  figmaName: string;\n  figmaKey: string;\n  figmaUrl?: string;\n  inputMapper?: string;\n  originalInputMapper?: string;\n  exportType?: ExportType;\n  importName?: string;\n  importPath?: string;\n  source: string;\n  loc?: string;\n}\n\nexport const runFigmaPublish = async (sys: DevToolsSys, args: CLIArgs) => {\n  const ciMode = isCI(args);\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma publish \"))) + `  ` + dim(VERSION));\n\n  const {\n    khulnasoftPrivateKey: privateKey,\n    khulnasoftPublicKey: spaceId,\n    userId,\n    spaceName,\n    figmaAuth,\n  } = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    khulnasoftPrivateKey: true,\n    khulnasoftPublicKey: true,\n    figmaAuth: true,\n  });\n\n  let devTools: DevTools | undefined;\n  if (!devTools) {\n    devTools = await createDevTools(sys);\n  }\n\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  track(\"figma publish started\", {\n    spaceId,\n    mappingFiles: mappingFiles.length,\n  });\n\n  const { figmaKhulnasoftLinks, foundErrors } = await findMappingsFromFiles({\n    figmaAuth,\n    force: args.force,\n    mappingFiles,\n    sys,\n    print: true,\n  });\n\n  if (foundErrors) {\n    track(\"figma publish user error\", {\n      spaceId,\n      mappingFiles: mappingFiles.length,\n      figmaKhulnasoftLinks: figmaKhulnasoftLinks.length,\n    });\n    if (args.force !== true) {\n      log.message(\"\");\n      cancel(\n        `Please fix the issues and try again, or use the ${bold(\n          \"--force\"\n        )} flag to publish regardless.`\n      );\n      return await exit(1);\n    } else {\n      log.warn(\n        \"Local mappings contain some errors, but --force flag was used, skipping.\"\n      );\n    }\n  }\n\n  const extraContext = spaceName\n    ? `${bold(spaceName)} ${dim(\"(\" + spaceId + \")\")}`\n    : `space id \"${bold(spaceId)}\"`;\n\n  if (mappingFiles.length === 0) {\n    log.warning(\n      `No mappings found. Publishing will remove all existing mapping in space: ${extraContext}.`\n    );\n    const confirmPublish =\n      ciMode ||\n      args.yes ||\n      (await confirm({\n        message: `Do you want to continue?`,\n        active: \"Publish\",\n        inactive: \"Cancel\",\n      }));\n    if (isCancel(confirmPublish) || !confirmPublish) {\n      cancel(\"Publish cancelled\");\n      return await exit(1);\n    }\n  } else {\n    const confirmPublish =\n      ciMode ||\n      args.yes ||\n      (await confirm({\n        message: `Do you want to publish the found mappings to ${extraContext}?\\n${dim(\n          \"Existing mappings will be overwritten\"\n        )}`,\n        active: \"Publish\",\n        inactive: \"Cancel\",\n      }));\n    if (isCancel(confirmPublish) || !confirmPublish) {\n      cancel(\"Publish cancelled\");\n      return await exit(1);\n    }\n  }\n  let s = spinner();\n  const repoInfo = await sys.getRepoInfo();\n  if (!args.dryrun) {\n    s.start(\"Publishing Figma Mappings\");\n    await publishFigmaMappings(sys, {\n      spaceId: spaceId!,\n      userId: userId!,\n      privateKey: privateKey!,\n      figmaKhulnasoftLinks,\n      repoInfo,\n    });\n    s.stop(\n      figmaKhulnasoftLinks.length > 0\n        ? `${figmaKhulnasoftLinks.length} mappings uploaded`\n        : \"All mappings removed from the Khulnasoft space\"\n    );\n  }\n\n  if (args.printJson || args.dryrun) {\n    const highlight = createEmphasize(common);\n\n    log.info(\n      highlight.highlight(\"json\", JSON.stringify(figmaKhulnasoftLinks, null, 2))\n        .value\n    );\n  }\n\n  await setPublicKey(sys, spaceId!, devTools, true);\n\n  log.success(bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))));\n\n  const command =\n    {\n      react: \"npm run start\",\n      angular: \"npm run start\",\n      vue: \"npm run dev\",\n      svelte: \"npm run dev\",\n      next: \"npm run dev\",\n      remix: \"npm run dev\",\n    }[devTools.framework] ?? \"npm run start\";\n\n  outro(\n    dim(\"You can now start the dev server:\\n\\n   \") +\n      bgBlack(white(bold(` ${command} `))) +\n      \"\\n\\n   \" +\n      dim(\n        \"Then, go back to Figma and generate code again to see your mapped components.\"\n      )\n  );\n\n  track(\"figma publish success\", {\n    spaceId,\n    mappingFiles: mappingFiles.length,\n    figmaKhulnasoftLinks: figmaKhulnasoftLinks.length,\n  });\n};\n\nasync function parseFile(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  typeChecker: ts.TypeChecker\n): Promise<FigmaKhulnasoftLink[]> {\n  const figmaKhulnasoftLinks: FigmaKhulnasoftLink[] = [];\n  const nodes: ts.Node[] = [sourceFile];\n  const fileLoc = sys.relative(sys.getAppRootDir(), sourceFile.fileName);\n  while (nodes.length > 0) {\n    const node = nodes.shift()!;\n    if (isFigmaMapperCall(node, sourceFile)) {\n      const link = parseCallExpression(sys, node, sourceFile, typeChecker);\n      const { line, character } = sourceFile.getLineAndCharacterOfPosition(\n        node.getStart()\n      );\n      if (link) {\n        link.loc = `${fileLoc}:${line + 1}:${character + 1}`;\n        figmaKhulnasoftLinks.push(link);\n      }\n    }\n    nodes.push(...node.getChildren(sourceFile));\n  }\n  return figmaKhulnasoftLinks;\n}\n\nexport const FIGMA_CONNECT_CALL = `figmaMapping`;\n\nfunction parseCallExpression(\n  sys: DevToolsSys,\n  node: ts.CallExpression,\n  sourceFile: ts.SourceFile,\n  typeChecker: ts.TypeChecker\n): FigmaKhulnasoftLink | null {\n  const [arg] = node.arguments;\n  if (!arg) {\n    throw new Error(\"Invalid figmaMapping call, no arguments found\");\n  }\n  if (!ts.isObjectLiteralExpression(arg)) {\n    throw new Error(\n      \"Invalid figmaMapping call, argument is not an object literal\"\n    );\n  }\n  const properties = arg.properties;\n  if (!properties) {\n    throw new Error(\"Invalid figmaMapping call, argument has no properties\");\n  }\n  let figmaKey: string = \"\";\n  let inputMapper: string | undefined;\n  let originalInputMapper: string | undefined;\n  let khulnasoftName: string = \"-\";\n  let figmaName: string = sys.basename(sourceFile.fileName, \".mapper.tsx\");\n  let exportType: ExportType | undefined;\n  let importName: string | undefined;\n  let importPath: string | undefined;\n  let figmaUrl: string | undefined;\n  if (node.typeArguments && node.typeArguments.length > 0) {\n    const name = extractFigmaComponentName(\n      node.typeArguments[0].getText(sourceFile)\n    );\n    if (name) {\n      figmaName = name;\n    }\n  }\n  for (const prop of properties) {\n    const name = prop.name?.getText(sourceFile);\n    if (!name) {\n      throw new Error(\"Invalid figmaMapping call, property has no name\");\n    }\n\n    switch (name) {\n      case \"url\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\"Invalid figmaMapping call, url has no initializer\");\n        }\n        const initializer = prop.initializer;\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentKey is not a string literal\"\n          );\n        }\n        figmaUrl = initializer.text;\n        break;\n      }\n      case \"componentKey\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentKey has no initializer\"\n          );\n        }\n        const initializer = prop.initializer;\n\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentKey is not a string literal\"\n          );\n        }\n        figmaKey = initializer.text;\n        break;\n      }\n      case \"mapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          if (prop.parameters[0].type) {\n            const type = prop.parameters[0].type.getText(sourceFile);\n            const name = extractFigmaComponentName(type);\n            if (name) {\n              figmaName = name;\n            }\n          }\n          function visitor(node: ts.Node) {\n            if (\n              (ts.isJsxOpeningElement(node) ||\n                ts.isJsxSelfClosingElement(node)) &&\n              ts.isIdentifier(node.tagName)\n            ) {\n              khulnasoftName = node.tagName.getText(sourceFile);\n\n              // use typechecker to get import statement of node.tagName\n              const symbol = typeChecker.getSymbolAtLocation(node.tagName);\n              const declaration = symbol?.getDeclarations()?.[0];\n              if (declaration) {\n                const importDeclaration =\n                  findParentImportDeclaration(declaration);\n\n                if (importDeclaration?.importClause) {\n                  const name =\n                    importDeclaration.importClause.name?.getText(sourceFile);\n                  if (name === khulnasoftName) {\n                    exportType = \"default\";\n                  } else if (importDeclaration.importClause.namedBindings) {\n                    exportType = \"named\";\n                  }\n                  importName = khulnasoftName;\n                  if (ts.isStringLiteral(importDeclaration.moduleSpecifier)) {\n                    importPath = importDeclaration.moduleSpecifier.text;\n                  }\n                }\n              }\n\n              return khulnasoftName;\n            } else {\n              ts.forEachChild(node, visitor);\n            }\n          }\n          ts.forEachChild(prop, visitor);\n\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^mapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          break;\n        }\n      }\n      case \"designTokenMapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^designTokenMapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          figmaKey = \"design-tokens\";\n          break;\n        }\n      }\n      case \"genericMapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^genericMapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          figmaKey = \"*\";\n          break;\n        }\n      }\n    }\n  }\n\n  if (!figmaKey && !figmaUrl) {\n    throw new Error(\"Invalid figmaMapping call, no componentKey or url found\");\n  }\n  if (!figmaKey && !inputMapper) {\n    throw new Error(\"Invalid figmaMapping call, no mapper found\");\n  }\n  if (!figmaKey && !originalInputMapper) {\n    throw new Error(\"Invalid figmaMapping call, no original mapper found\");\n  }\n\n  return {\n    khulnasoftName,\n    figmaName,\n    figmaKey,\n    figmaUrl,\n    inputMapper,\n    exportType,\n    importName,\n    importPath,\n    originalInputMapper,\n    source: \"cli\",\n  };\n}\n\nfunction transpileInputMapper(originalInputMapper: string): string {\n  const inputMapper = ts.transpile(originalInputMapper, {\n    target: ts.ScriptTarget.Latest,\n    allowNonTsExtensions: true,\n    moduleResolution: ts.ModuleResolutionKind.NodeJs,\n    module: ts.ModuleKind.CommonJS,\n    noImplicitAny: false,\n    esModuleInterop: true,\n    noUnusedLocals: false,\n    noUnusedParameters: false,\n    jsx: ts.JsxEmit.React,\n    jsxFactory: \"React.createElement\",\n    jsxFragmentFactory: \"React.Fragment\",\n    allowJs: true,\n    checkJs: true,\n    strict: true,\n    suppressImplicitAnyIndexErrors: true,\n    typeRoots: [\"node_modules/@types\"],\n    inlineSources: true,\n    inlineSourceMap: true,\n  });\n  return inputMapper;\n}\n\nfunction findParentImportDeclaration(\n  declaration: ts.Declaration\n): ts.ImportDeclaration | undefined {\n  let current = declaration;\n  while (current) {\n    if (ts.isImportDeclaration(current)) {\n      return current;\n    }\n    current = current.parent as ts.Declaration;\n  }\n}\nfunction isFigmaMapperCall(\n  node: ts.Node,\n  sourceFile: ts.SourceFile\n): node is ts.CallExpression {\n  return (\n    ts.isCallExpression(node) &&\n    node.expression.getText(sourceFile).includes(FIGMA_CONNECT_CALL)\n  );\n}\n\nexport async function findAllMappingFiles(sys: DevToolsSys) {\n  const skipFolders = [\"node_modules\", \"dist\", \"build\", \"public\"];\n  const files = await sys.readdirRecursive(sys.getAppRootDir(), skipFolders);\n  return files.filter((file) => isMapperFile(file));\n}\n\nexport interface FigmaKhulnasoftData {\n  figmaKhulnasoftLinks: FigmaKhulnasoftLink[];\n}\n\nfunction extractFigmaComponentName(name: string) {\n  const componentNameMatch = name.match(/^Figma(\\w+)Props$/);\n  if (componentNameMatch && typeof componentNameMatch[1] === \"string\") {\n    return componentNameMatch[1];\n  }\n  return undefined;\n}\n\nconst resolveFigmaUrls = async (figmaAuth: FigmaAuth, figmaUrls: string[]) => {\n  const files = new Map<string, string[]>();\n  const mappedLinks: Record<string, string> = {};\n\n  figmaUrls.forEach((url) => {\n    const parsedFile = parseFigmaURL(url);\n    if (!parsedFile) {\n      throw new Error(\n        \"Invalid Figma URL, use Cmd+L while selecting a figma component to get a link to selection\"\n      );\n    }\n    let ids = files.get(parsedFile.fileID);\n    if (!ids) {\n      ids = [];\n      files.set(parsedFile.fileID, ids);\n    }\n    if (!ids.includes(parsedFile.nodeId)) {\n      ids.push(parsedFile.nodeId);\n    }\n    mappedLinks[url] = `${parsedFile.fileID}/${parsedFile.nodeId}`;\n  });\n  await Promise.all(\n    Array.from(files.entries()).map(async ([fileID, nodeIds]) => {\n      const nodes = await getFigmaNodeData(\n        figmaAuth,\n        fileID,\n        nodeIds.join(\",\"),\n        0\n      );\n      for (const nodeId of nodeIds) {\n        const nodeData = nodes[nodeId];\n        const componentKey =\n          nodeData.components[nodeId]?.key ??\n          nodeData.componentSets[nodeId]?.key;\n        if (!componentKey) {\n          throw new Error(\n            `Cannot resolve figma component key for ${nodeId} in file ${fileID}`\n          );\n        }\n        const key = `${fileID}/${nodeId}`;\n        for (const url of figmaUrls) {\n          if (mappedLinks[url] === key) {\n            mappedLinks[url] = componentKey;\n          }\n        }\n      }\n    })\n  );\n  return mappedLinks;\n};\n\nexport async function setPublicKey(\n  sys: DevToolsSys,\n  publicKey: string,\n  devTools: DevTools | undefined,\n  ensureFigmaImportPage: boolean = false\n) {\n  try {\n    if (!devTools) {\n      devTools = await createDevTools(sys);\n    }\n    await devTools.setPublicApiKey({\n      publicApiKey: publicKey,\n    });\n    if (ensureFigmaImportPage) {\n      await devTools.ensureFigmaImportPage();\n    }\n    return true;\n  } catch (e) {\n    Sentry.captureException(e);\n    return false;\n  }\n}\n\nexport interface PublishedMapping {\n  repoInfo: RepoInfo | undefined;\n  figmaKhulnasoftLinks: FigmaKhulnasoftLink[];\n  spaceId: string;\n  privateKey: string;\n  userId: string;\n}\n\nconst publishFigmaMappings = async (\n  sys: DevToolsSys,\n  data: PublishedMapping\n) => {\n  const url = new URL(`${apiAirV2Host}/mappings/publish`);\n  url.searchParams.set(\"apiKey\", data.spaceId);\n  url.searchParams.set(\"userId\", data.userId);\n\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${data.privateKey}`,\n    },\n    body: JSON.stringify({\n      remoteUrl: data.repoInfo?.remoteUrl,\n      defaultBranch: data.repoInfo?.defaultBranch,\n      currentBranch: data.repoInfo?.currentBranch,\n      commit: data.repoInfo?.commit,\n      figmaKhulnasoftLinks: data.figmaKhulnasoftLinks,\n      sdkVersion: sys.sdkVersion,\n      spaceKind: sys.kind,\n      cliVersion: sys.version,\n      cliFrameworks: sys.getFrameworks().map((f) => f.name),\n      cliPlatform: sys.platform(),\n      cliDeviceId: await sys.getDeviceId(),\n    }),\n  });\n  if (!res.ok) {\n    throw new Error(\"Failed to publish Figma mappings\");\n  }\n  return true;\n};\n\nexport async function findMappingsFromFiles({\n  figmaAuth,\n  force,\n  mappingFiles,\n  print,\n  sys,\n}: {\n  figmaAuth?: FigmaAuth;\n  force?: boolean;\n  mappingFiles: string[];\n  print: boolean;\n  sys: DevToolsSys;\n}): Promise<{\n  figmaKhulnasoftLinks: FigmaKhulnasoftLink[];\n  foundErrors: boolean;\n}> {\n  if (!mappingFiles.length) {\n    return {\n      figmaKhulnasoftLinks: [],\n      foundErrors: false,\n    };\n  }\n  const figmaKhulnasoftLinks: FigmaKhulnasoftLink[] = [];\n\n  const tsProgram = await createTsProgram(sys, mappingFiles);\n  const typeChecker = tsProgram.getTypeChecker();\n  const allDiagnostics: ts.Diagnostic[] = [\n    ...tsProgram.getSyntacticDiagnostics(),\n    ...tsProgram.getGlobalDiagnostics(),\n    ...tsProgram.getSemanticDiagnostics(),\n    ...tsProgram.getDeclarationDiagnostics(),\n  ].filter((c) => {\n    if (c.category !== ts.DiagnosticCategory.Error) {\n      return false;\n    }\n    // usused parameter\n    if (\n      c.code === 6133 ||\n      c.code === 6138 ||\n      c.code === 6196 ||\n      c.code === 6192 ||\n      c.code === 6198 ||\n      c.code === 6199 ||\n      c.code === 6205 ||\n      c.code === 1449 ||\n      c.code === 2578 ||\n      c.code === 2695\n    ) {\n      return false;\n    }\n\n    // Omit prop type mismatch\n    // like when the component expects an enum but the value is a string\n    // TODO: this is actually a legitimate type error and the correct way would be to use `as EnumType` in the mapper\n    if (c.code === 2322) {\n      return false;\n    }\n\n    return true;\n  });\n\n  const seenFigmaKeys = new Set<string>();\n  let foundErrors = false;\n  for (const file of mappingFiles) {\n    try {\n      const sourceFile = tsProgram.getSourceFile(file);\n      if (!sourceFile) {\n        throw new Error(`Could not find source file for ${file}`);\n      }\n      const fileName = sourceFile?.fileName;\n      if (fileName) {\n        const diagnostics = allDiagnostics.filter((a) => {\n          return a.file?.fileName === fileName;\n        });\n        if (diagnostics.length > 0) {\n          foundErrors = true;\n\n          if (force !== true) {\n            log.error(\n              red(\n                `TypeScript errors in ${dim(\n                  sys.relative(sys.getAppRootDir(), file)\n                )}:\\n`\n              ) + diagnostics.map((d) => ` \u2022 ${formatDiagnostic(d)}`).join(\"\\n\")\n            );\n            continue;\n          }\n        }\n      }\n\n      const links = await parseFile(sys, sourceFile, typeChecker);\n      figmaKhulnasoftLinks.push(...links);\n\n      if (print) {\n        let hasDuplicates = false;\n        const infoMessage =\n          `${dim(sys.relative(sys.getAppRootDir(), file))}:\\n` +\n          links\n            .map((l) => {\n              let isDuplicate = false;\n              if (l.figmaKey) {\n                isDuplicate ||= seenFigmaKeys.has(l.figmaKey);\n                seenFigmaKeys.add(l.figmaKey);\n              } else if (l.figmaUrl) {\n                // only check for duplicated urls if no key is provided\n                isDuplicate ||= seenFigmaKeys.has(l.figmaUrl);\n                seenFigmaKeys.add(l.figmaUrl);\n              }\n\n              let text = \"\";\n              switch (l.figmaKey) {\n                // add icon\n                case \"design-tokens\":\n                  text = \"  \" + cyan(`\u2747\uFE0E Design tokens mapper`);\n                  break;\n                case \"*\": // generic mapper\n                  text = \"  \" + yellow(`\u25CF Generic mapper`);\n                  break;\n                default:\n                  text = `  ${magenta(\n                    \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName)\n                  )}  ${dim(\"\u2192\")}  ${\n                    l.khulnasoftName === \"-\" ? \"-\" : \"<\" + l.khulnasoftName + \">\"\n                  }`;\n                  break;\n              }\n              if (isDuplicate) {\n                hasDuplicates = true;\n                text = bgRed(text + bold(` <= duplicated`));\n              }\n              return text;\n            })\n            .join(\"\\n\");\n\n        if (hasDuplicates) {\n          foundErrors = true;\n          log.error(infoMessage);\n        } else {\n          log.info(infoMessage);\n        }\n      }\n    } catch (e) {\n      Sentry.captureException(e);\n      console.error(e);\n      return await exit(1);\n    }\n  }\n\n  const figmaLinksToResolve = figmaKhulnasoftLinks\n    .filter((l) => l.figmaUrl && !l.figmaKey)\n    .map((l) => l.figmaUrl!);\n\n  if (figmaLinksToResolve.length > 0) {\n    const resolvedFigmaKeys = await resolveFigmaUrls(\n      figmaAuth!,\n      figmaLinksToResolve\n    );\n    for (const l of figmaKhulnasoftLinks) {\n      if (l.figmaUrl && !l.figmaKey) {\n        const resolvedKey = resolvedFigmaKeys[l.figmaUrl];\n        if (!resolvedKey) {\n          throw new Error(\"bad internal state\");\n        }\n        l.figmaKey = resolvedKey;\n      }\n    }\n  }\n\n  return {\n    figmaKhulnasoftLinks,\n    foundErrors,\n  };\n}\n\nfunction formatDiagnostic(d: ts.Diagnostic): string {\n  const { messageText } = d;\n  if (typeof messageText === \"string\") {\n    return messageText;\n  }\n\n  const { next } = messageText;\n  const parts = [messageText.messageText];\n\n  if (next) {\n    parts.push(next.map(($) => $.messageText).join(\"\\n\"));\n  }\n\n  return parts.join(\"\\n\");\n}\n\ndeclare const VERSION: string;\n", "import type { DevToolsSys, PackageJSON } from \"../types\";\n\nexport function hasTsconfig(sys: DevToolsSys) {\n  const tsconfigPath = sys.join(sys.getAppRootDir(), \"tsconfig.json\");\n  return sys.exists(tsconfigPath);\n}\n\nconst skipFolders = [\"node_modules\", \"dist\", \"build\", \"public\"];\n\nexport async function findKhulnasoftRegistry(\n  sys: DevToolsSys,\n  defaultFolder: string\n) {\n  async function walk(\n    root: string,\n    depth: number\n  ): Promise<string | undefined> {\n    if (depth > 10) {\n      return;\n    }\n    const files = await sys.readdir(root);\n    for (const file of files) {\n      if (skipFolders.includes(file)) {\n        continue;\n      }\n      const filePath = sys.join(root, file);\n      const stat = await sys.stat(filePath);\n      if (stat) {\n        if (stat.isFile() && file.startsWith(\"khulnasoft-registry.\")) {\n          return filePath;\n        }\n        if (stat.isDirectory()) {\n          const result = await walk(filePath, depth + 1);\n          if (result) {\n            return result;\n          }\n        }\n      }\n    }\n  }\n  const result = await walk(sys.getAppRootDir(), 0);\n  if (!result) {\n    const typescriptEnabled = await hasTsconfig(sys);\n\n    const registryFileName = `khulnasoft-registry.${\n      typescriptEnabled ? \"ts\" : \"js\"\n    }`;\n    return sys.join(defaultFolder, registryFileName);\n  }\n  return result;\n}\n\nexport async function findPackageJson(sys: DevToolsSys, dir: string) {\n  const fsRoot = sys.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    const pkgJsonPath = sys.join(dir, \"package.json\");\n    const content = await sys.readFile(pkgJsonPath);\n    if (content) {\n      const pkgJson = JSON.parse(content) as PackageJSON;\n      return pkgJson;\n    }\n\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = sys.dirname(dir);\n  }\n\n  return null;\n}\n\nexport async function findUpNodeModules(sys: DevToolsSys, p: string) {\n  for (let i = 0; i < 20; i++) {\n    const dir = sys.dirname(p);\n    const nodeModulesDir = sys.join(dir, \"node_modules\");\n\n    if (await sys.exists(nodeModulesDir)) {\n      return nodeModulesDir;\n    }\n\n    if (p === sys.getAppRootDir()) {\n      break;\n    }\n    p = sys.dirname(p);\n  }\n\n  return sys.join(sys.getAppRootDir(), \"node_modules\");\n}\n\nexport async function recursiveFindDir(\n  sys: DevToolsSys,\n  dir: string,\n  findDirectoryName: string\n): Promise<string | undefined> {\n  const itemNames = await sys.readdir(dir);\n\n  if (itemNames.includes(findDirectoryName)) {\n    return sys.join(dir, findDirectoryName);\n  }\n\n  const results = await Promise.all(\n    itemNames.map(async (itemName) => {\n      if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n        return;\n      }\n\n      const itemPath = sys.join(dir, itemName);\n      const itemStat = await sys.stat(itemPath);\n      if (itemStat.isDirectory()) {\n        const foundDir = await recursiveFindDir(\n          sys,\n          itemPath,\n          findDirectoryName\n        );\n        if (foundDir) {\n          return foundDir;\n        }\n      }\n    })\n  );\n\n  return results.find((r) => typeof r === \"string\");\n}\n", "import type { ComponentInfo, DevToolsSys } from \"../types\";\nimport detectPackageManager from \"which-pm-runs\";\n\nexport function isMapperFile(fileName: string) {\n  return fileName.endsWith(\".mapper.tsx\") || fileName.endsWith(\".mapper.jsx\");\n}\n\nexport function getImportPath(\n  sys: DevToolsSys,\n  containingModulePath: string,\n  moduleToImportPath: string\n) {\n  containingModulePath = normalizePathSlash(containingModulePath);\n  moduleToImportPath = normalizePathSlash(moduleToImportPath);\n\n  containingModulePath = sys.dirname(containingModulePath);\n\n  const fileName = sys.basename(\n    moduleToImportPath,\n    sys.extname(moduleToImportPath)\n  );\n\n  moduleToImportPath = sys.dirname(moduleToImportPath);\n\n  let p: string;\n  if (fileName === \"index\") {\n    p = sys.relative(containingModulePath, moduleToImportPath);\n  } else {\n    p = sys.relative(\n      containingModulePath,\n      sys.join(moduleToImportPath, fileName)\n    );\n  }\n  p = normalizePathSlash(sys.normalize(p));\n\n  if (!p.startsWith(\".\")) {\n    p = \"./\" + p;\n  }\n\n  return p;\n}\n\nexport function normalizePathSlash(path: string) {\n  const isExtendedLengthPath = path.startsWith(\"\\\\\\\\?\\\\\");\n  if (isExtendedLengthPath) {\n    return path;\n  }\n  return path.replace(/\\\\/g, \"/\");\n}\n\nexport function getComponentImportNameFilePath(\n  sys: DevToolsSys,\n  filePath: string\n) {\n  const ext = sys.extname(filePath);\n  const parts = sys.basename(filePath, ext).split(/[\\/\\\\]/);\n  const fileName = parts[parts.length - 1];\n  if (fileName === \"index\") {\n    return getComponentImportName(sys.basename(sys.dirname(filePath)));\n  }\n  return getComponentImportName(fileName);\n}\n\nexport function getComponentImportName(str: string) {\n  return getComponentDisplayName(str).replace(/ /g, \"\");\n}\n\nexport function getComponentDisplayNameFromFilePath(\n  sys: DevToolsSys,\n  filePath: string\n) {\n  const ext = sys.extname(filePath);\n\n  const fileName = normalizePathSlash(sys.basename(filePath, ext))\n    .split(\"/\")\n    .pop()!;\n  if (fileName === \"index\") {\n    return getComponentDisplayName(sys.basename(sys.dirname(filePath)));\n  }\n  return getComponentDisplayName(fileName);\n}\n\nexport function getComponentImportPath(sys: DevToolsSys, absFilePath: string) {\n  let relFilePath = normalizePathSlash(\n    sys.relative(sys.getAppRootDir(), absFilePath)\n  );\n\n  relFilePath = relFilePath\n    .split(\"/\")\n    .filter((p) => p !== \".\" && p !== \"..\" && p !== \"\")\n    .join(\"/\");\n\n  if (relFilePath.endsWith(\".tsx\") || relFilePath.endsWith(\".jsx\")) {\n    relFilePath = relFilePath.slice(0, -4);\n  } else if (relFilePath.endsWith(\".ts\") || relFilePath.endsWith(\".js\")) {\n    relFilePath = relFilePath.slice(0, -3);\n  }\n\n  const frameworks = sys.getFrameworks();\n\n  if (relFilePath.startsWith(\"src/\")) {\n    relFilePath = relFilePath.slice(4);\n  }\n\n  if (frameworks.some((f) => f.name.includes(\"next\"))) {\n    return \"@/\" + relFilePath;\n  }\n\n  return \"~/\" + relFilePath;\n}\n\nexport function getDisplayFilePath(sys: DevToolsSys, filePath: string) {\n  let path = filePath;\n  let parts: string[] = [];\n  for (let i = 0; i < 2; i++) {\n    const part = sys.basename(path);\n    if (!part || part === \"components\") {\n      break;\n    }\n    parts.unshift(part);\n    path = sys.dirname(path);\n  }\n  return parts.join(\"/\");\n}\n\nexport function getComponentDisplayName(str: string) {\n  str = str\n    .replace(/([A-Z])/g, \" $1\")\n    .replace(/\\./g, \" \")\n    .replace(/_/g, \" \")\n    .replace(/-/g, \" \")\n    .replace(/\\s/g, \" \")\n    .trim();\n\n  while (str.includes(\"  \")) {\n    str = str.replace(/  /g, \" \");\n  }\n\n  return str\n    .split(\" \")\n    .map((p) => {\n      if (p.length > 2) {\n        return p[0].toUpperCase() + p.slice(1);\n      }\n      return p;\n    })\n    .join(\"\")\n    .trim();\n}\n\nexport function sortComponents(cmps: ComponentInfo[]) {\n  return cmps.sort((a, b) =>\n    a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase())\n  );\n}\n\nexport async function getComponentId(\n  sys: DevToolsSys,\n  filePath: string,\n  exportName: string,\n  externalImportPath?: string\n) {\n  if (typeof exportName !== \"string\" || exportName === \"\") {\n    throw new Error(\n      `getComponentId(), exportName must be a non-empty string, received: ${exportName}, ${filePath}`\n    );\n  }\n\n  if (externalImportPath) {\n    filePath = externalImportPath;\n  }\n\n  filePath = sys.normalize(filePath);\n\n  const hash = await sys.hash(filePath + \"#\" + exportName);\n  return hash.substring(0, 8);\n}\n\nexport async function getLocalAppId(sys: DevToolsSys) {\n  const hash = await sys.hash(sys.getAppRootDir());\n  return hash.substring(0, 8);\n}\n\nexport function isNumber(v: any): v is number {\n  return typeof v === \"number\";\n}\n\nexport function isBoolean(v: any): v is boolean {\n  return typeof v === \"boolean\";\n}\n\nexport function isString(v: any): v is string {\n  return typeof v === \"string\";\n}\n\nexport function isValidJsxTag(tag: string) {\n  if (typeof tag === \"string\") {\n    return /^[A-Z][A-Za-z0-9]*$/.test(tag);\n  }\n  return false;\n}\n\nexport function clone<T>(obj: T): T {\n  return JSON.parse(JSON.stringify(obj));\n}\n\nexport function shouldSkipFolder(\n  sys: DevToolsSys,\n  skipFolders: Set<string>,\n  fileName: string\n): boolean {\n  for (const folder of skipFolders) {\n    if (sys.dirname(fileName).includes(folder)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function getPackageManager() {\n  try {\n    const detected = detectPackageManager();\n    if (detected?.name) {\n      return detected.name;\n    }\n  } catch (e) {}\n\n  return \"npm\";\n}\n", "import type {\n  DevToolsSys,\n  Framework,\n  PackageJSON,\n  SemanticVersion,\n} from \"../types\";\nimport { findPackageJson } from \"../common/fs\";\nimport { getPackageManager } from \"../common/utils\";\n\nexport async function detectFrameworks(sys: DevToolsSys) {\n  const frameworks: Framework[] = [];\n\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (pkgJson) {\n    const depFrameworks = await detectFrameworksFromPackageJson(pkgJson, sys);\n    frameworks.push(...depFrameworks);\n  }\n\n  return frameworks;\n}\n\nexport async function detectTurbopack(sys: DevToolsSys) {\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (!pkgJson?.scripts?.dev) {\n    return false;\n  }\n\n  const devCommand = pkgJson.scripts.dev;\n  return devCommand.includes(\"--turbopack\");\n}\n\nexport async function detectFrameworksFromPackageJson(\n  pkgJson: PackageJSON,\n  sys: DevToolsSys\n) {\n  const frameworks: Framework[] = [];\n  if (pkgJson && typeof pkgJson === \"object\") {\n    const depNames = new Set(\n      Object.keys({\n        ...pkgJson.dependencies,\n        ...pkgJson.devDependencies,\n      })\n    );\n\n    for (const depName of FRAMEWORKS) {\n      if (depNames.has(depName)) {\n        if (!frameworks.some((f) => f.name === depName)) {\n          const payload: Framework = { name: depName };\n          if (VERSION_RESOLVER.has(depName)) {\n            payload.version = await VERSION_RESOLVER.get(depName)!(sys);\n          }\n          frameworks.push(payload);\n        }\n      }\n    }\n  }\n  return frameworks;\n}\n\n/**\n * Given a fragment of a semantic version string, return the integer form\n * or undefined if the input is invalid.\n * @param versionFragment - A fragment of the semantic version string\n * such as \"5\" in \"1.2.5\"\n */\nfunction parseSemanticVersionNumber(versionFragment: string) {\n  const parsed = parseInt(versionFragment);\n\n  return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/**\n * Resolvers to get the installed JS Framework version. This is useful when Dev Tools\n * needs to do things differently based on JS Framework versions (such as to account\n * for breaking changes across major releases.)\n */\nconst VERSION_RESOLVER = new Map<\n  string,\n  (sys: DevToolsSys) => Promise<SemanticVersion | undefined>\n>([\n  [\n    \"next\",\n    async (sys: DevToolsSys) => {\n      if (!sys.spawnSync) {\n        return;\n      }\n      const packageManager = getPackageManager();\n      const command = packageManager === \"npm\" ? \"npx\" : packageManager;\n\n      const { stdout } = sys.spawnSync(command, [\"next\", \"-v\"], {\n        encoding: \"utf8\",\n      });\n\n      if (!stdout) {\n        return;\n      }\n\n      const nextInfo = stdout.match(/(Next.js v)([\\d.]+)/g);\n      if (!nextInfo) {\n        return;\n      }\n      const version = nextInfo[0].split(\"Next.js v\")[1];\n      const [major, minor, patch] = version.split(\".\");\n\n      return {\n        major: parseSemanticVersionNumber(major),\n        minor: parseSemanticVersionNumber(minor),\n        patch: parseSemanticVersionNumber(patch),\n      };\n    },\n  ],\n]);\n\n/**\n * Order it so more specific frameworks are first\n * and more general ones are last\n */\nconst FRAMEWORKS: string[] = [\n  // toolkit frameworks\n  \"@shopify/remix-oxygen\",\n  \"@shopify/hydrogen\",\n\n  // meta frameworks\n  \"@khulnasoft.com/qwik-city\",\n  \"@remix-run/react\",\n  \"@sveltejs/kit\",\n  \"astro\",\n  \"gatsby\",\n  \"next\",\n  \"nuxt\",\n\n  // frameworks\n  \"@khulnasoft.com/qwik\",\n  \"@angular/core\",\n  \"react\",\n  \"solid-js\",\n  \"svelte\",\n  \"vue\",\n];\n", "import type { DevToolsSys } from \"../types\";\n\nexport async function getKhulnasoftCache(sys: DevToolsSys) {\n  const cachePath = getCachePath(sys);\n  const contents = await sys.readFile(cachePath);\n  if (typeof contents === \"string\") {\n    return JSON.parse(contents);\n  }\n  return {};\n}\n\nexport async function setKhulnasoftCache(\n  sys: DevToolsSys,\n  cache: Record<string, any>\n) {\n  cache = typeof cache === \"object\" && cache != null ? cache : {};\n  const cachePath = getCachePath(sys);\n  await sys.writeFile(cachePath, JSON.stringify(cache ?? {}, null, 2));\n}\n\nfunction getCachePath(sys: DevToolsSys) {\n  const rootDir = sys.getAppRootDir();\n  return sys.join(rootDir, \"node_modules\", \".khulnasoft\", \"khulnasoft-cache.json\");\n}\n", "import type { DevToolsSys, EnvInfo } from \"../types\";\n\nexport async function getDotEnvValue(\n  sys: DevToolsSys,\n  dotEnvFileNames: string[],\n  envKey: string\n) {\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue: null,\n    file: \"\",\n  };\n\n  for (const dotEnvFileName of dotEnvFileNames) {\n    const envPath = sys.join(sys.getAppRootDir(), dotEnvFileName);\n    const envVars = await parseDotEnvFile(sys, envPath);\n    if (envVars) {\n      const value = envVars[envKey];\n      if (\n        typeof value === \"string\" &&\n        value.length > 0 &&\n        value !== \"YOUR_API_KEY\"\n      ) {\n        envInfo.envValue = value;\n        envInfo.file = envPath;\n        return envInfo;\n      }\n    }\n  }\n\n  envInfo.file = sys.join(\n    sys.getAppRootDir(),\n    dotEnvFileNames[dotEnvFileNames.length - 1]\n  );\n  return envInfo;\n}\n\nexport async function setDotEnvValue(\n  sys: DevToolsSys,\n  dotEnvFileNames: string[],\n  envKey: string,\n  envValue: string\n) {\n  const env = await getDotEnvValue(sys, dotEnvFileNames, envKey);\n\n  const modifiedType = await setDotEnvVar(sys, env.file, envKey, envValue);\n\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue,\n    file: env.file,\n    modifiedType,\n  };\n\n  return envInfo;\n}\n\nexport async function parseDotEnvFile(sys: DevToolsSys, envPath: string) {\n  const envContent = await sys.readFile(envPath);\n  if (typeof envContent === \"string\") {\n    return parseDotEnvContent(envContent);\n  }\n  return null;\n}\n\nexport function parseDotEnvContent(envContent: string) {\n  const envVars: Record<string, string> = {};\n\n  // Convert line breaks to same format\n  const lines = envContent.replace(/\\r\\n?/gm, \"\\n\");\n\n  let match: RegExpExecArray | null;\n  while ((match = DOTENV_LINE.exec(lines)) != null) {\n    const key = match[1];\n\n    // Default undefined or null to empty string\n    let value = match[2] || \"\";\n\n    // Remove whitespace\n    value = value.trim();\n\n    // Check if double quoted\n    const maybeQuote = value[0];\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/gm, \"$2\");\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, \"\\n\");\n      value = value.replace(/\\\\r/g, \"\\r\");\n    }\n\n    // Add to object\n    envVars[key] = value;\n  }\n\n  return envVars;\n}\n\nconst DOTENV_LINE =\n  /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/gm;\n\nexport async function setDotEnvVar(\n  sys: DevToolsSys,\n  envPath: string,\n  key: string,\n  value: string\n): Promise<\"create\" | \"update\" | null> {\n  const comment = `# https://www.khulnasoft.com/c/docs/using-your-api-key`;\n  let envContent = await sys.readFile(envPath);\n\n  // check if we already have an .env file\n  if (envContent) {\n    // read the existing .env file\n    if (envContent.includes(key)) {\n      // existing .env has a khulnasoft api key already, update its value\n      if (!envContent.includes(value)) {\n        // existing .env has a khulnasoft api key, but it's not the same as the one we have\n        sys.debug(`Replace \"${key}\" in ${envPath}`);\n        envContent = envContent.replace(\n          new RegExp(`${key}=.*`),\n          `${key}=${value}`\n        );\n        await sys.writeFile(envPath, envContent);\n        return \"update\";\n      } else {\n        sys.debug(`\"${key}\" with \"${value}\" already set in ${envPath}`);\n      }\n    } else {\n      // existing .env does not have a khulnasoft api key, append the key/value\n      sys.debug(`Append \"${key}\" to ${envPath}`);\n      envContent += `\\n\\n${comment}\\n${key}=${value}\\n\\n`;\n      await sys.writeFile(envPath, envContent);\n      return \"update\";\n    }\n  } else {\n    // create a new .env file since it doesn't exist yet\n    sys.debug(`Creating new .env file with \"${key}\" at ${envPath}`);\n    envContent = [comment, `${key}=${value}`, ``].join(\"\\n\");\n    await sys.writeFile(envPath, envContent);\n    return \"create\";\n  }\n\n  return null;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getNextApiKey(sys: DevToolsSys) {\n  const dotEnvFileNames = [\n    \".env.local\",\n    \".env.development.local\",\n    \".env.production.local\",\n    \".env.development\",\n    \".env.production\",\n    \".env\",\n  ];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    NEXT_KHULNASOFT_API_KEY_ENV\n  );\n  return env;\n}\n\nexport async function setNextApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getNextApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const NEXT_KHULNASOFT_API_KEY_ENV = `NEXT_PUBLIC_KHULNASOFT_API_KEY`;\n", "import type { spawnSync } from \"node:child_process\";\n\nexport interface DevToolsPath {\n  basename: (path: string, suffix?: string) => string;\n  extname: (path: string) => string;\n  dirname: (path: string) => string;\n  isAbsolute: (path: string) => boolean;\n  join: (...paths: string[]) => string;\n  normalize: (path: string) => string;\n  relative: (from: string, to: string) => string;\n  resolve: (...pathSegments: string[]) => string;\n}\n\nexport interface RepoInfo {\n  remoteUrl: string;\n  defaultBranch: string;\n  currentBranch: string;\n  commit: string;\n}\n\nexport interface DevToolsSys extends DevToolsPath {\n  cwd: () => string;\n  getCwdDir: () => string;\n  getAppRootDir: () => string;\n  getRepoRootDir: () => string;\n  exists: (path: string) => Promise<boolean>;\n  existsSync: (path: string) => boolean;\n  readdir: (path: string, absolutePaths?: boolean) => Promise<string[]>;\n  readdirRecursive: (path: string, skipFolders?: string[]) => Promise<string[]>;\n  readdirSync: (path: string) => string[];\n  readFile: (filePath: string) => Promise<string | null>;\n  readFileSync: (filePath: string) => string | null;\n  spawnSync: typeof spawnSync | undefined;\n  stat: (path: string) => Promise<{\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n  }>;\n  statSync: (path: string) => {\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n  };\n  writeFile: (filePath: string, content: string) => Promise<void>;\n  unlink: (filePath: string) => Promise<void>;\n  unlinkSync: (filePath: string) => void;\n  formatCode: (filePath: string, code: string) => Promise<string>;\n  hash: (str: string) => Promise<string>;\n  on: (eventName: \"change\", callback: FileChangeCallback) => void;\n  off: (eventName: \"change\", callback: FileChangeCallback) => void;\n  debug: (...args: any[]) => void;\n  launchEditor: (file: LaunchEditorFile) => Promise<void>;\n  platform: () => DevtoolsPlatform;\n  getDeviceId: () => Promise<string>;\n  getFrameworks: () => Framework[];\n  getRepoInfo: () => Promise<RepoInfo>;\n  ts: typeof import(\"typescript\");\n  version: string;\n  sdkVersion: SDK_VERSION_VALUES | null;\n  ignoreMissingConfig?: boolean;\n  kind: SPACE_KIND_VALUES;\n  magicast: typeof import(\"magicast\") | undefined;\n}\n\nexport interface DevtoolsPlatform {\n  runtime: string;\n  os: string;\n}\n\nexport type FileChangeCallback = (file: FileChangeInfo) => Promise<void> | void;\n\nexport interface FileChangeInfo {\n  path: string;\n  basename: string;\n  extname: string;\n  dirname: string;\n}\n\nexport interface EnsureConfigResult {\n  content: string;\n  filePath: string;\n  fileName: string;\n  hasContentUpdates: boolean;\n}\n\nexport interface FrameworkDependency {\n  name: string;\n  version?: string;\n  devDependency?: boolean;\n}\n\nexport interface BuildToolConfig {\n  id: string;\n  content: string;\n  filePath: string;\n}\n\nexport interface CreateDevToolsOptions extends DevToolsSys {\n  frameworks?: Framework[];\n}\n\nexport interface FrameworkKhulnasoftPageOptions {\n  templateContentId: string;\n  title: string;\n  pathname: string;\n  localePathname?: string;\n}\n\nexport interface DevToolsAdapter {\n  getPublicApiKey: () => Promise<EnvInfo>;\n  setPublicApiKey: (opts: SetPublicApiKeyOptions) => Promise<EnvInfo>;\n  khulnasoftPageOptions: () => Promise<FrameworkKhulnasoftPageOptions>;\n  ensureKhulnasoftSetup: () => Promise<ModifiedFile[]>;\n  ensureFigmaImportPage: () => Promise<ModifiedFile[]>;\n  getRegistry: (opts?: GetRegistryOptions) => Promise<ComponentRegistry>;\n  getRegistryPath: () => string;\n  loadComponent: (opts: LoadComponentOptions) => Promise<LoadComponent>;\n  addExternalPackage: (pkgName: string) => void;\n  registerComponent: (\n    opts: RegisterComponentOptions\n  ) => Promise<ComponentRegistry>;\n  unregisterComponent: (\n    opts: UnregisterComponentOptions\n  ) => Promise<ComponentRegistry>;\n  setRegisteredComponentInfo: (\n    opts: SetComponentInfoOptions\n  ) => Promise<ComponentRegistry>;\n  setRegisteredComponentInput: (\n    opts: SetComponentInputOptions\n  ) => Promise<ComponentRegistry>;\n  getDependencies: (opts: DependenciesOptions) => FrameworkDependency[];\n  getDevRunCommand: () => string;\n  getCache: () => Promise<Record<string, any>>;\n  setCache: (cache: Record<string, any>) => Promise<void>;\n}\n\nexport interface DevTools extends DevToolsAdapter {\n  exportRegistry: () => Promise<string>;\n  importRegistry: (exportedRegistry: string) => Promise<ComponentRegistry>;\n  framework: string;\n  findAllDependencies: () => Promise<DependencyTree>;\n}\n\nexport interface DevToolsServerOptions extends DevToolsSys, DevTools {\n  getClientId: () => string;\n  getPastSyncInfo?: (data: { sessionKey: string; since: number }) => any;\n  resyncSnippet?: (data: { syncInfo: SyncInfo; snippet: Snippet }) => any;\n  enableAppWatch: (enabled: boolean) => Promise<boolean>;\n  closeAppServer: () => Promise<void>;\n  restartAppServer: () => Promise<void>;\n  port?: number;\n}\n\nexport interface DevToolsHttpServer {\n  url: string;\n  port: number;\n  setContext(ctx: DevToolsServerContext): void;\n  close(): Promise<void>;\n}\n\nexport interface KhulnasoftAppCredentials {\n  publicApiKey: string | null;\n}\n\nexport interface DevToolsServerContext\n  extends Required<DevToolsServerOptions>,\n    KhulnasoftAppCredentials {\n  devToolsServerUrl: string;\n  isValid: boolean;\n  serverShouldRestart: boolean;\n}\n\nexport interface SetPublicApiKeyOptions {\n  publicApiKey: string;\n}\n\nexport interface EnvInfo {\n  envKey: string;\n  envValue: string | null;\n  file: string;\n  modifiedType?: \"create\" | \"update\" | null;\n}\n\nexport interface DevToolsServer {\n  getUrl: () => string;\n}\n\nexport type ApiRequest =\n  | ApiConnectKhulnasoftRequest\n  | ApiDevToolsEnabledRequest\n  | ApiGetRegistryRequest\n  | ApiLaunchEditorRequest\n  | ApiRegisterComponentRequest\n  | ApiRegisteredComponentInfoRequest\n  | ApiRegisteredComponentInputRequest\n  | ApiLoadComponentRequest\n  | ApiUnregisterComponentRequest\n  | ApiValidateKhulnasoftRequest\n  | ApiFrameworksRequest\n  | ApiReadFileRequest\n  | ApiWriteFileRequest\n  | ApiReaddirRequest\n  | ApiGetKhulnasoftCacheRequest\n  | ApiEnsureFigmaImportPageRequest\n  | ApiSetKhulnasoftCacheRequest\n  | ApiTranspileModuleRequest\n  | ApiTranspileFileRequest\n  | ApiPastSyncInfoRequest\n  | ApiResyncSnippetRequest\n  | ApiLocalConfigRequest;\n\nexport interface ApiTranspileModuleRequest extends TranspileModuleOptions {\n  type: \"transileModule\";\n}\n\nexport interface ApiTranspileFileRequest extends TranspileFileOptions {\n  type: \"transileFile\";\n}\n\nexport interface ApiGetKhulnasoftCacheRequest {\n  type: \"getCache\";\n}\n\nexport interface ApiSetKhulnasoftCacheRequest {\n  type: \"setCache\";\n  data: Record<string, any>;\n}\nexport interface ApiPastSyncInfoRequest {\n  type: \"getPastSyncInfo\";\n  data: { sessionKey: string; since: number };\n}\nexport interface ApiResyncSnippetRequest {\n  type: \"resyncSnippet\";\n  data: { syncInfo: SyncInfo; snippet: Snippet };\n}\n\nexport interface ApiEnsureFigmaImportPageRequest {\n  type: \"ensureFigmaImportPage\";\n}\n\nexport interface ApiConnectKhulnasoftRequest {\n  type: \"connectKhulnasoft\";\n  data: {\n    publicApiKey: string;\n    privateAuthKey: string;\n    kind: string | null;\n  };\n}\n\nexport interface ApiDevToolsEnabledRequest {\n  type: \"enableDevTools\";\n  data: {\n    enabled: boolean;\n  };\n}\n\nexport interface ApiGetRegistryRequest {\n  type: \"getRegistry\";\n  data?: GetRegistryOptions;\n}\n\nexport interface GetRegistryOptions {\n  readAllInputTypes?: boolean;\n}\n\nexport interface ApiLocalConfigRequest {\n  type: \"localConfig\";\n}\n\nexport interface ApiLaunchEditorRequest {\n  type: \"launchEditor\";\n  data: LaunchEditorFile;\n}\n\nexport interface ApiRegisterComponentRequest {\n  type: \"registerComponent\";\n  data: RegisterComponentOptions;\n}\n\nexport interface ApiUnregisterComponentRequest {\n  type: \"unregisterComponent\";\n  data: UnregisterComponentOptions;\n}\n\nexport interface ApiRegisteredComponentInfoRequest {\n  type: \"setComponentInfo\";\n  data: SetComponentInfoOptions;\n}\n\nexport interface ApiRegisteredComponentInputRequest {\n  type: \"setComponentInput\";\n  data: SetComponentInputOptions;\n}\n\nexport interface ApiLoadComponentRequest {\n  type: \"loadComponent\";\n  data: LoadComponentOptions;\n}\n\nexport interface ApiValidateKhulnasoftRequest {\n  type: \"validateKhulnasoft\";\n}\n\nexport interface ApiFrameworksRequest {\n  type: \"getFrameworks\";\n}\n\nexport interface ApiReadFileRequest {\n  type: \"readFile\";\n  path: string;\n}\n\nexport interface ApiWriteFileRequest {\n  type: \"writeFile\";\n  path: string;\n  content: string;\n}\n\nexport interface ApiReaddirRequest {\n  type: \"readdir\";\n  path: string;\n}\n\nexport interface ApiResponse<T = any> {\n  type?: string;\n  data?: T;\n  errors?: string[];\n}\n\nexport interface ValidatedKhulnasoft {\n  isValid: boolean;\n  pathname: string;\n  platform: DevtoolsPlatform;\n}\n\nexport interface ConnectedKhulnasoft {\n  success: boolean;\n  pathname: string;\n  modifiedFiles: ModifiedFile[];\n  platform: DevtoolsPlatform;\n  kind: SPACE_KIND_VALUES;\n}\n\nexport interface LocalConfig {\n  userId?: string;\n  deviceId?: string;\n}\n\nexport interface ModifiedFile {\n  filePath: string;\n  displayFilePath?: string;\n  modifiedType: \"create\" | \"update\";\n}\n\nexport interface Framework {\n  name: string;\n  version?: SemanticVersion;\n}\n\nexport interface SemanticVersion {\n  major?: number;\n  minor?: number;\n  patch?: number;\n}\n\nexport interface ComponentRegistry {\n  components: ComponentInfo[];\n  registryPath: string;\n  registryDisplayPath: string;\n  frameworks: Framework[];\n  dependencies: AppDependency[];\n  publicApiKey: string | undefined;\n  devToolsVersion: string;\n}\n\nexport interface AppDependency {\n  name: string;\n}\n\nexport interface ExportedRegistry {\n  components: MinimalComponentInfo[];\n  version: number;\n}\n\nexport interface LoadComponent extends ComponentRegistry {\n  component: ComponentInfo;\n}\n\nexport interface LoadComponentOptions {\n  cmpId: string;\n}\n\nexport interface RegisterComponentOptions {\n  cmpId: string | string[];\n}\n\nexport interface UnregisterComponentOptions {\n  cmpId: string;\n}\n\nexport interface SetComponentInfoOptions {\n  cmpId: string;\n  name?: string;\n  image?: string | null;\n  description?: string | null;\n}\n\nexport interface SetComponentInputOptions\n  extends Partial<Omit<ComponentInput, \"isRegistered\">> {\n  cmpId: string;\n  name: string;\n  registerInput?: boolean;\n}\n\nexport interface DependenciesOptions {\n  sdkVersion: SDK_VERSION_VALUES | null;\n}\n\nexport interface ComponentInfo {\n  id: string;\n  filePath: string;\n  relFilePath: string;\n  importPath: string;\n  name: string;\n  image?: string;\n  description?: string;\n  inputs: ComponentInput[];\n  displayFilePath?: string;\n  exportName: string;\n  exportType?: ExportType;\n  importName: string;\n  nodeIndex?: number;\n  isRegistered?: boolean;\n  acceptsChildren?: boolean;\n  meta?: Record<string, any>;\n  dependencies?: AppDependency[];\n  externalImportPath?: string;\n}\n\nexport interface MinimalComponentInfo {\n  filePath: string;\n  name: string;\n  image?: string;\n  description?: string;\n  inputs: ComponentInput[];\n  exportName: string;\n}\n\n/**\n * Extends the @khulnasoft.com/sdk Input type to include additional properties.\n * If a property is set to null, it will be removed from the input.\n */\nexport interface ComponentInput {\n  /** This is the name of the component prop this input represents */\n  name: string;\n  /** A friendlier name to show in the UI if the component prop name is not ideal for end users. Setting to null will remove the value. */\n  friendlyName?: string | null;\n  /** A default value to use. Setting to null will remove the value. */\n  defaultValue?: string | number | boolean | null;\n  /**\n   * The type of input to use, such as 'text'\n   *\n   * See all available inputs [here](https://www.khulnasoft.com/c/docs/custom-react-components#input-types)\n   * and you can create your own custom input types and associated editor UIs with [plugins](https://www.khulnasoft.com/c/docs/extending/plugins)\n   */\n  type: string;\n  /** Is this input mandatory or not. Setting to null will remove the setting. */\n  required?: boolean | null;\n  /**\n   * Additional text to render in the UI to give guidance on how to use this\n   *\n   * @example\n   * ```js\n   * helperText: 'Be sure to use a proper URL, starting with \"https://\"'\n   * 111\n   */\n  helperText?: string | null;\n  /**\n   * For \"text\" input type, specifying an enum will show a dropdown of options instead\n   */\n  enum?:\n    | string[]\n    | {\n        label: string;\n        value: string | number | boolean;\n        helperText?: string;\n      }[];\n  meta?: Record<string, any>;\n\n  /** Add-on data that should not go in the registry */\n  isRegistered?: boolean;\n\n  hideFromUI?: boolean;\n}\n\nexport type ExportType = \"default\" | \"named\";\n\nexport interface PackageJSON {\n  dependencies?: { [pkgName: string]: string };\n  devDependencies?: { [pkgName: string]: string };\n  scripts?: { [scriptName: string]: string };\n  [key: string]: any;\n}\n\nexport type ModuleFormat = \"esm\" | \"cjs\";\n\nexport interface LaunchEditorFile {\n  filePath: string;\n  line?: number;\n  column?: number;\n}\n\nexport interface TranspileFileOptions {\n  filePath: string;\n  compilerOptions: import(\"typescript\").CompilerOptions;\n}\n\nexport interface TranspileModuleOptions {\n  code: string;\n  filePath?: string;\n  compilerOptions: import(\"typescript\").CompilerOptions;\n}\n\nexport interface TranspileResult {\n  code: string | null;\n  output: string | null;\n  diagnostics: TranspileDiagnostic[];\n}\n\nexport interface TranspileDiagnostic {\n  messageText: string;\n}\n\nexport const SDK_VERSIONS = {\n  gen1: \"Gen 1\",\n  gen2: \"Gen 2\",\n} as const;\n\ntype SDK_VERSION_KEYS = keyof typeof SDK_VERSIONS;\n\nexport type SDK_VERSION_VALUES = (typeof SDK_VERSIONS)[SDK_VERSION_KEYS];\n\nexport interface SDKVersionInfo {\n  version: SDK_VERSION_VALUES;\n  recommended: boolean;\n}\n\nexport interface SDKFrameworks {\n  [key: string]: SDKVersionInfo[];\n}\n\nexport interface UpdateRegistry {\n  addCmpToRegistry: ComponentInfo | null;\n  removeCmpFromRegistry: ComponentInfo | null;\n  updateRegisteredCmp: ComponentInfo | null;\n  nodeIndex: number;\n  components: ComponentInfo[];\n}\n\nexport interface AddCliOptions {\n  cwd: string;\n  command?: string;\n  snippetId?: string;\n  snippet?: Snippet;\n  path?: string;\n}\n\nexport interface FileNode {\n  name: string;\n  code: string;\n  path: string;\n  timestamp?: number;\n  snippetId?: string;\n}\n\nexport interface FolderNode {\n  name: string;\n  path: string;\n  files: (FileNode | FolderNode)[];\n}\nexport interface Snippet {\n  createdDate: number;\n  contentId: string;\n  code: string;\n  framework: string;\n  suggestedName: string;\n  id: string;\n  files: Array<FileNode | FolderNode>;\n  sessionKey: string;\n}\nexport interface SyncInfo {\n  snippet: Snippet;\n  pathInput: string;\n  writtenFiles: Array<FileNode>;\n  timeStamp: number;\n}\nexport interface Package {\n  name: string;\n  subPackages: string[];\n}\n\nexport type DependencyTree = Package[];\n\nexport const SPACE_KIND = {\n  CMS: \"cms\",\n  VCP: \"vcp\",\n  HYBRID: \"hybrid\",\n} as const;\n\ntype SPACE_KIND_KEYS = keyof typeof SPACE_KIND;\n\nexport type SPACE_KIND_VALUES = (typeof SPACE_KIND)[SPACE_KIND_KEYS] | null;\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function codeToSource(sys: DevToolsSys, code: string | null = \"\") {\n  return sys.ts.createSourceFile(\n    \"module.tsx\",\n    typeof code === \"string\" ? code : \"\",\n    sys.ts.ScriptTarget.Latest,\n    undefined\n  );\n}\n\nexport function codeToStatement(sys: DevToolsSys, code: string | null = \"\") {\n  const sourceFile = codeToSource(sys, code?.trim());\n  if (sourceFile.statements.length === 0) {\n    throw new Error(`No statements found in code: ${code}`);\n  }\n  return sourceFile.statements[0];\n}\n\nexport function sourceToCode(\n  sys: DevToolsSys,\n  node: ts.Node | null | undefined,\n  removeComments?: boolean\n) {\n  if (node) {\n    const printer = sys.ts.createPrinter({\n      newLine: sys.ts.NewLineKind.LineFeed,\n      removeComments,\n    });\n    if (sys.ts.isSourceFile(node)) {\n      return printer.printFile(node).trim() + \"\\n\";\n    }\n\n    return (\n      printer\n        .printNode(\n          sys.ts.EmitHint.Unspecified,\n          node,\n          sys.ts.createSourceFile(\"module.tsx\", \"\", sys.ts.ScriptTarget.Latest)\n        )\n        .trim() + \"\\n\"\n    );\n  }\n  return \"\";\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function setObjectExpressionProperty(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n  propName: string,\n  propValue: any,\n  deleteIfNullOrUndefined = true\n) {\n  const props = obj.properties.filter((p) =>\n    sys.ts.isPropertyAssignment(p)\n  ) as ts.PropertyAssignment[];\n\n  const i = getObjLiteralPropertyIndex(sys, obj, propName);\n  if (i > -1) {\n    if (propValue == null && deleteIfNullOrUndefined) {\n      return sys.ts.factory.updateObjectLiteralExpression(\n        obj,\n        props.filter((_, j) => j !== i)\n      );\n    }\n\n    props[i] = sys.ts.factory.updatePropertyAssignment(\n      props[i],\n      props[i].name,\n      valueToExpression(sys, propValue)\n    );\n\n    return sys.ts.factory.updateObjectLiteralExpression(obj, props);\n  }\n\n  if (propValue != null) {\n    props.push(\n      sys.ts.factory.createPropertyAssignment(\n        propName,\n        valueToExpression(sys, propValue)\n      )\n    );\n  }\n\n  return sys.ts.factory.updateObjectLiteralExpression(obj, props);\n}\n\nexport function getObjLiteralPropertyIndex(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n  propName: string\n) {\n  return obj.properties.findIndex((p) => {\n    return getTextOfPropertyName(sys, p) === propName;\n  });\n}\n\nexport function expressionToValue(sys: DevToolsSys, exp: ts.Expression): any {\n  switch (exp.kind) {\n    case sys.ts.SyntaxKind.ArrayLiteralExpression:\n      return convertArrayExpressionToJsArray(\n        sys,\n        exp as ts.ArrayLiteralExpression\n      );\n\n    case sys.ts.SyntaxKind.ObjectLiteralExpression:\n      return objectExpressionToObjectValue(\n        sys,\n        exp as ts.ObjectLiteralExpression\n      );\n\n    case sys.ts.SyntaxKind.StringLiteral:\n      return (exp as ts.StringLiteral).text;\n\n    case sys.ts.SyntaxKind.NumericLiteral:\n      return Number((exp as ts.NumericLiteral).text);\n\n    case sys.ts.SyntaxKind.NoSubstitutionTemplateLiteral:\n      return (exp as ts.StringLiteral).text;\n\n    case sys.ts.SyntaxKind.TrueKeyword:\n      return true;\n\n    case sys.ts.SyntaxKind.FalseKeyword:\n      return false;\n\n    case sys.ts.SyntaxKind.Identifier:\n      switch ((exp as ts.Identifier).escapedText) {\n        case \"undefined\":\n          return undefined;\n        case \"null\":\n          return null;\n        case \"String\":\n          return String;\n        case \"Number\":\n          return Number;\n        case \"Boolean\":\n          return Boolean;\n        case \"NaN\":\n          return NaN;\n      }\n  }\n  return undefined;\n}\n\nexport function objectExpressionToObjectValue(\n  sys: DevToolsSys,\n  objectLiteral: ts.ObjectLiteralExpression\n): { [key: string]: any } {\n  const obj: { [key: string]: any } = {};\n\n  if (objectLiteral && sys.ts.isObjectLiteralExpression(objectLiteral)) {\n    for (const prop of objectLiteral.properties) {\n      if (sys.ts.isPropertyAssignment(prop)) {\n        const attrName = getTextOfPropertyName(sys, prop);\n        if (attrName) {\n          obj[attrName] = expressionToValue(sys, prop.initializer);\n        }\n      }\n    }\n  }\n\n  return obj;\n}\n\nexport function convertArrayExpressionToJsArray(\n  sys: DevToolsSys,\n  arr: ts.ArrayLiteralExpression\n) {\n  if (arr && sys.ts.isArrayLiteralExpression(arr)) {\n    return arr.elements.map((el) => expressionToValue(sys, el));\n  }\n  return [];\n}\n\nexport function getTextOfPropertyName(\n  sys: DevToolsSys,\n  prop: ts.PropertyAssignment | ts.ObjectLiteralElementLike | undefined\n): string | undefined {\n  if (prop && sys.ts.isPropertyAssignment(prop)) {\n    const propName = prop.name;\n    switch (propName.kind) {\n      case sys.ts.SyntaxKind.Identifier:\n        return (<ts.Identifier>propName).text;\n      case sys.ts.SyntaxKind.StringLiteral:\n      case sys.ts.SyntaxKind.NumericLiteral:\n        return (<ts.LiteralExpression>propName).text;\n      case sys.ts.SyntaxKind.ComputedPropertyName:\n        const expression = (<ts.ComputedPropertyName>propName).expression;\n        if (\n          sys.ts.isStringLiteral(expression) ||\n          sys.ts.isNumericLiteral(expression)\n        ) {\n          return (<ts.LiteralExpression>(\n            (<ts.ComputedPropertyName>propName).expression\n          )).text;\n        }\n    }\n  }\n  return undefined;\n}\n\nexport function valueToExpression(sys: DevToolsSys, val: any) {\n  return valueToTsExpression(sys, val, new WeakSet());\n}\n\nfunction valueToTsExpression(sys: DevToolsSys, val: any, refs: WeakSet<any>) {\n  if (val === undefined) {\n    return sys.ts.factory.createIdentifier(\"undefined\");\n  }\n  if (val === null) {\n    return sys.ts.factory.createIdentifier(\"null\");\n  }\n  if (typeof val === \"string\") {\n    return sys.ts.factory.createStringLiteral(val);\n  }\n  if (typeof val === \"number\") {\n    if (isNaN(val)) {\n      return sys.ts.factory.createIdentifier(\"NaN\");\n    }\n    return sys.ts.factory.createNumericLiteral(val);\n  }\n  if (val === true) {\n    return sys.ts.factory.createTrue();\n  }\n  if (val === false) {\n    return sys.ts.factory.createFalse();\n  }\n  if (val === String) {\n    return sys.ts.factory.createIdentifier(\"String\");\n  }\n  if (val === Number) {\n    return sys.ts.factory.createIdentifier(\"Number\");\n  }\n  if (val === Boolean) {\n    return sys.ts.factory.createIdentifier(\"Boolean\");\n  }\n  if (Array.isArray(val)) {\n    return arrayToArrayExpression(sys, val, refs);\n  }\n  if (typeof val === \"object\") {\n    return objectToObjectLiteral(sys, val, refs);\n  }\n  return sys.ts.factory.createIdentifier(val);\n}\n\nfunction arrayToArrayExpression(\n  sys: DevToolsSys,\n  list: any[],\n  refs: WeakSet<any>\n): ts.ArrayLiteralExpression {\n  const newList: any[] = list.map((l) => {\n    return valueToTsExpression(sys, l, refs);\n  });\n  return sys.ts.factory.createArrayLiteralExpression(newList, true);\n}\n\nfunction objectToObjectLiteral(\n  sys: DevToolsSys,\n  obj: { [key: string]: any },\n  refs: WeakSet<any>\n): ts.ObjectLiteralExpression {\n  if (refs.has(obj)) {\n    return sys.ts.factory.createIdentifier(\"undefined\") as any;\n  }\n\n  refs.add(obj);\n\n  const newProperties: ts.ObjectLiteralElementLike[] = Object.keys(obj).map(\n    (key) => {\n      return sys.ts.factory.createPropertyAssignment(\n        key,\n        valueToTsExpression(sys, obj[key], refs) as ts.Expression\n      );\n    }\n  );\n\n  return sys.ts.factory.createObjectLiteralExpression(newProperties, true);\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInput, DevToolsSys } from \"../../types\";\n\nexport function parseComponentSourcePropsFromNode(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  fnNode: ts.Node | undefined\n) {\n  let inputs: ComponentInput[] = [];\n  if (!fnNode) {\n    return inputs;\n  }\n\n  let properties: ts.Symbol[] | null = null;\n\n  if (\n    sys.ts.isArrowFunction(fnNode) ||\n    sys.ts.isFunctionExpression(fnNode) ||\n    sys.ts.isFunctionDeclaration(fnNode)\n  ) {\n    const fnParams = fnNode.parameters;\n    if (fnParams.length > 0) {\n      const propsNode = fnParams[0];\n      const type = typeChecker.getTypeAtLocation(propsNode);\n      if (type.aliasTypeArguments && type.aliasTypeArguments.length > 0) {\n        properties = type.aliasTypeArguments[0].getProperties();\n      } else {\n        properties = type.getProperties();\n      }\n    }\n  } else if (sys.ts.isIdentifier(fnNode)) {\n    const type = typeChecker.getTypeAtLocation(fnNode);\n    const classDecl = type.symbol?.valueDeclaration;\n\n    if (classDecl && sys.ts.isClassDeclaration(classDecl)) {\n      const extendClause = classDecl.heritageClauses?.find(\n        (h) => h.token === sys.ts.SyntaxKind.ExtendsKeyword\n      );\n      const extendTypes = extendClause?.types;\n      if (extendTypes) {\n        for (const extendType of extendTypes) {\n          const symbol = typeChecker.getSymbolAtLocation(extendType.expression);\n          if (symbol?.name === \"Component\") {\n            if (sys.ts.isExpressionWithTypeArguments(extendType)) {\n              const typeArguments = extendType.typeArguments;\n              if (typeArguments) {\n                const propsTypeNode = typeArguments[0];\n                const propsType =\n                  typeChecker.getTypeFromTypeNode(propsTypeNode);\n                properties = propsType.getProperties();\n              }\n            }\n            break;\n          }\n        }\n      }\n    }\n\n    if (!properties) {\n      const callSignatures = type.getCallSignatures();\n      if (callSignatures.length > 0) {\n        const params = callSignatures[0].getParameters();\n        if (params.length > 0) {\n          const typeOfSymbol = typeChecker.getTypeOfSymbolAtLocation(\n            params[0],\n            fnNode\n          );\n          properties = typeOfSymbol.getProperties();\n        }\n      }\n    }\n  } else if (sys.ts.isExportSpecifier(fnNode)) {\n    const symbol = typeChecker.getSymbolAtLocation(fnNode.name);\n    if (symbol) {\n      const type = typeChecker.getTypeOfSymbolAtLocation(symbol, fnNode);\n      const callSignatures = type.getCallSignatures();\n      if (callSignatures.length > 0) {\n        const params = callSignatures[0].getParameters();\n        if (params.length > 0) {\n          const typeOfSymbol = typeChecker.getTypeOfSymbolAtLocation(\n            params[0],\n            fnNode\n          );\n          properties = typeOfSymbol.getProperties();\n        }\n      }\n    }\n  }\n\n  if (properties) {\n    for (const symbol of properties) {\n      const input = parseComponentSourceInputFromSymbol(\n        sys,\n        typeChecker,\n        symbol\n      );\n\n      if (input) {\n        inputs.push(input);\n      }\n    }\n  }\n\n  inputs = inputs.filter(shouldIncludeInput);\n  if (inputs.length > 0) {\n    return inputs;\n  }\n\n  return parseComponentSourceInputFromJsDocs(sys, fnNode);\n}\n\nfunction parseComponentSourceInputFromSymbol(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  symbol: ts.Symbol\n) {\n  let value = symbol.valueDeclaration;\n  const propName = symbol.getName();\n  if (!value) {\n    value = symbol.getDeclarations()?.[0];\n  }\n  if (value && sys.ts.isPropertySignature(value)) {\n    if (propName !== \"children\") {\n      const filename = value.getSourceFile().fileName;\n      if (filename.includes(\"node_modules/@types/\")) {\n        return null;\n      }\n    }\n    let khulnasoftInputType = \"string\"; // default\n    let nonPrimitiveType: string | undefined = undefined;\n\n    if (value?.type) {\n      const nodeType = typeChecker.getTypeFromTypeNode(value.type);\n\n      // get the type string\n      const typeString = typeChecker.typeToString(nodeType);\n\n      const normlizedKhulnasoftType = normalizeKhulnasoftInputType(typeString);\n      if (!normlizedKhulnasoftType.knownType) {\n        if (\n          isValidKhulnasoftObjectType(typeString) ||\n          nodeType.flags & sys.ts.TypeFlags.StringLike\n        ) {\n          khulnasoftInputType = \"string\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.NumberLike) {\n          khulnasoftInputType = \"number\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.IndexedAccess) {\n          khulnasoftInputType = \"list\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.Object) {\n          khulnasoftInputType = \"object\";\n        } else if (\n          nodeType.isUnion() &&\n          nodeType.types.every((t) => t.flags & sys.ts.TypeFlags.Object)\n        ) {\n          khulnasoftInputType = \"object\";\n        } else if (\n          nodeType.isIntersection() &&\n          nodeType.types.some((t) => t.flags & sys.ts.TypeFlags.Object)\n        ) {\n          khulnasoftInputType = \"object\";\n        } else {\n          khulnasoftInputType = \"string\";\n        }\n      } else {\n        khulnasoftInputType = normlizedKhulnasoftType.khulnasoftType;\n      }\n\n      if (typeString !== khulnasoftInputType) {\n        // if the type is not a valid khulnasoft input type\n        // then we need to store it in the meta\n        nonPrimitiveType = typeString;\n      }\n    }\n\n    const input: ComponentInput = {\n      name: propName,\n      type: khulnasoftInputType,\n      isRegistered: false,\n    };\n    if (nonPrimitiveType && value.type) {\n      const resolvedType = resolveType(\n        sys,\n        typeChecker,\n        typeChecker.getTypeFromTypeNode(value.type)\n      );\n\n      input.meta = input.meta || {};\n      if (\n        resolvedType &&\n        resolvedType.length > 0 &&\n        input.type === \"string\" &&\n        resolvedType.every(hasQuotes)\n      ) {\n        input.enum = resolvedType.map(removeQuotes);\n      } else {\n        input.meta.ts = nonPrimitiveType;\n      }\n    }\n\n    if (!value.questionToken) {\n      input.required = true;\n    }\n\n    return input;\n  }\n  return null;\n}\n\nfunction parseComponentSourceInputFromJsDocs(\n  sys: DevToolsSys,\n  fnNode: ts.Node\n) {\n  /**\n   * Component description.\n   *\n   * @component\n   * @param {Object} props\n   * @param {string} props.title The title of the component.\n   * @param {number} props.enabled Is the component enabled.\n   * @param {number} props.count Count of items.\n   */\n\n  const inputs: ComponentInput[] = [];\n  const jsDocComments = sys.ts.getJSDocCommentsAndTags(fnNode);\n\n  for (const jsDoc of jsDocComments) {\n    if (!sys.ts.isJSDoc(jsDoc) || !jsDoc.tags) {\n      continue;\n    }\n\n    for (const tag of jsDoc.tags) {\n      if (!sys.ts.isJSDocParameterTag(tag)) {\n        continue;\n      }\n      const tagName = tag.tagName.text;\n      if (tagName !== \"param\") {\n        continue;\n      }\n\n      // * @param {Object} props\n\n      const jsDocType = tag.typeExpression?.type;\n      if (!jsDocType || !sys.ts.isJSDocTypeLiteral(jsDocType)) {\n        continue;\n      }\n      const jsDocPropertyTags = jsDocType.jsDocPropertyTags;\n      if (!jsDocPropertyTags) {\n        continue;\n      }\n\n      for (const jsDocPropertyTag of jsDocPropertyTags) {\n        if (!sys.ts.isJSDocPropertyLikeTag(jsDocPropertyTag)) {\n          continue;\n        }\n        const paramPropName = jsDocPropertyTag.name;\n        if (!sys.ts.isQualifiedName(paramPropName)) {\n          continue;\n        }\n        const typeExp = jsDocPropertyTag.typeExpression;\n        if (!typeExp) {\n          continue;\n        }\n\n        // * @param {string} props.title The title of the component.\n\n        let khulnasoftInputType = \"\";\n        switch (typeExp.type.kind) {\n          case sys.ts.SyntaxKind.StringKeyword: {\n            khulnasoftInputType = \"string\";\n            break;\n          }\n          case sys.ts.SyntaxKind.NumberKeyword: {\n            khulnasoftInputType = \"number\";\n            break;\n          }\n          case sys.ts.SyntaxKind.BooleanKeyword: {\n            khulnasoftInputType = \"boolean\";\n            break;\n          }\n          default: {\n            // idk\n            continue;\n          }\n        }\n\n        const propName = paramPropName.right.text;\n\n        const input: ComponentInput = {\n          name: propName,\n          type: khulnasoftInputType,\n          isRegistered: false,\n        };\n        inputs.push(input);\n      }\n    }\n  }\n\n  return inputs.filter(shouldIncludeInput);\n}\n\nconst VALID_OBJECT_TYPES = [\n  \"ClassicComponent\",\n  \"FunctionComponent\",\n  \"IntrinsicElements\",\n  \"JSX\",\n  \"ReactNode\",\n  \"ReactElement\",\n  \"ReactPortal\",\n];\n\nfunction isValidKhulnasoftObjectType(type: string) {\n  if (typeof type !== \"string\") {\n    return false;\n  }\n\n  if (VALID_OBJECT_TYPES.some((t) => type.includes(t))) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function normalizeKhulnasoftInputType(t: string) {\n  if (typeof t === \"string\") {\n    t = t.trim();\n    if (INPUT_TYPES.some((i) => i.value === t)) {\n      return {\n        khulnasoftType: t,\n        knownType: true,\n      };\n    }\n  }\n  // default khulnasoft component input type\n  return {\n    khulnasoftType: \"string\",\n    knownType: false,\n  };\n}\n\n/**\n * https://www.khulnasoft.com/c/docs/custom-components-input-types\n */\nexport const INPUT_TYPES = [\n  { value: \"boolean\", text: \"boolean\" },\n  { value: \"color\", text: \"color (provides a color in hex or rgb)\" },\n  { value: \"date\", text: \"date (same format as the Date constructor)\" },\n  { value: \"email\", text: \"email\" },\n  { value: \"file\", text: \"file (uploads a file and provides a url)\" },\n  { value: \"list\", text: \"list (collection of items)\" },\n  { value: \"longText\", text: \"longText (multiline text editor)\" },\n  { value: \"number\", text: \"number\" },\n  { value: \"object\", text: \"object (set of specific names and values)\" },\n  { value: \"richText\", text: \"richText (provides value as html)\" },\n  { value: \"string\", text: \"string\" },\n];\n\nexport const STRING_TYPES = [\n  \"color\",\n  \"date\",\n  \"email\",\n  \"file\",\n  \"longText\",\n  \"richText\",\n  \"string\",\n];\nexport const NUMBER_TYPES = [\"number\"];\nexport const BOOLEAN_TYPES = [\"boolean\"];\nexport const ARRAY_TYPES = [\"list\"];\nexport const OBJECT_TYPES = [\"object\"];\n\nexport function getPrimitiveType(t: string) {\n  if (STRING_TYPES.includes(t)) {\n    return \"string\";\n  } else if (NUMBER_TYPES.includes(t)) {\n    return \"number\";\n  } else if (BOOLEAN_TYPES.includes(t)) {\n    return \"boolean\";\n  } else if (ARRAY_TYPES.includes(t)) {\n    return \"array\";\n  } else if (OBJECT_TYPES.includes(t)) {\n    return \"object\";\n  } else {\n    return \"string\";\n  }\n}\n\nfunction hasQuotes(text: string) {\n  return /^['\"].*['\"]$/.test(text);\n}\n\nexport function removeQuotes(text: string): string {\n  if (\n    (text.startsWith(`\"`) || text.startsWith(`'`)) &&\n    (text.endsWith(`\"`) || text.endsWith(`'`))\n  ) {\n    return text.slice(1, -1);\n  }\n  return text;\n}\n\n// This is used to get enum values from the type\nexport const resolveType = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type\n): string[] | undefined => {\n  const set = new Set<string>();\n  parseDocsType(sys, checker, type, set);\n\n  const hasTrue = set.delete(\"true\");\n  const hasFalse = set.delete(\"false\");\n  if (hasTrue || hasFalse) {\n    set.add(\"boolean\");\n  }\n\n  let parts = Array.from(set.keys()).sort();\n  if (parts.length > 1) {\n    parts = parts.map((p) => (p.indexOf(\"=>\") >= 0 ? `(${p})` : p));\n  }\n  // This is intentional as some props have too many enums\n  if (parts.length > 20) {\n    return;\n  } else {\n    return parts;\n  }\n};\n\nexport const typeToString = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type\n): string => {\n  const TYPE_FORMAT_FLAGS =\n    sys.ts.TypeFormatFlags.InElementType | sys.ts.TypeFormatFlags.NoTruncation;\n\n  return checker.typeToString(type, undefined, TYPE_FORMAT_FLAGS);\n};\n\nexport const parseDocsType = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type,\n  parts: Set<string>\n): void => {\n  if (type.isUnion()) {\n    (type as ts.UnionType).types.forEach((t) => {\n      parseDocsType(sys, checker, t, parts);\n    });\n  } else {\n    if (type.isLiteral()) {\n      const text = typeToString(sys, checker, type);\n      parts.add(text);\n    }\n  }\n};\n\nfunction shouldIncludeInput(input: ComponentInput) {\n  const propName = input?.name;\n  if (typeof propName !== \"string\" || propName === \"\") {\n    return false;\n  }\n\n  if (propName.startsWith(\"aria\")) {\n    return false;\n  }\n\n  if (propName.startsWith(\"data-\")) {\n    return false;\n  }\n\n  if (propName.startsWith(\"on\") && propName.length > 2) {\n    // onClick, onHover, etc\n    const thirdChar = propName.charAt(2);\n    if (thirdChar.toUpperCase() === thirdChar) {\n      return false;\n    }\n  }\n\n  return !PROP_BLACKLIST.has(propName.toLowerCase());\n}\n\n/**\n * Props that we should probably not include as a possible component input\n */\nconst PROP_BLACKLIST = new Set(\n  [\n    \"about\",\n    \"accessKey\",\n    \"accessKeyLabel\",\n    \"asChild\",\n    \"autoCapitalize\",\n    \"autoCorrect\",\n    \"autoFocus\",\n    \"autoSave\",\n    \"blur\",\n    \"contentEditable\",\n    \"contextMenu\",\n    \"dangerouslySetInnerHTML\",\n    \"datatype\",\n    \"defaultChecked\",\n    \"defaultValue\",\n    \"dir\",\n    \"draggable\",\n    \"enterKeyHint\",\n    \"focus\",\n    \"form\",\n    \"formAction\",\n    \"formEncType\",\n    \"formMethod\",\n    \"formNoValidate\",\n    \"formTarget\",\n    \"inlist\",\n    \"innerText\",\n    \"inputMode\",\n    \"is\",\n    \"isContentEditable\",\n    \"itemID\",\n    \"itemProp\",\n    \"itemRef\",\n    \"itemScope\",\n    \"itemType\",\n    \"lang\",\n    \"nonce\",\n    \"offsetHeight\",\n    \"offsetLeft\",\n    \"offsetTop\",\n    \"offsetWidth\",\n    \"outerText\",\n    \"prefix\",\n    \"property\",\n    \"radioGroup\",\n    \"rel\",\n    \"resource\",\n    \"results\",\n    \"rev\",\n    \"role\",\n    \"security\",\n    \"slot\",\n    \"spellCheck\",\n    \"suppressContentEditableWarning\",\n    \"suppressHydrationWarning\",\n    \"tabIndex\",\n    \"translate\",\n    \"typeof\",\n    \"unselectable\",\n    \"vocab\",\n  ].map((s) => s.toLowerCase())\n);\n", "import type ts from \"typescript\";\nimport type {\n  Component as KhulnasoftComponent,\n  Input as KhulnasoftInput,\n} from \"@khulnasoft.com/sdk\";\nimport type { ComponentInfo, ComponentInput, DevToolsSys } from \"../../types\";\nimport {\n  expressionToValue,\n  getTextOfPropertyName,\n  setObjectExpressionProperty,\n  valueToExpression,\n} from \"./convert-values\";\nimport { normalizeKhulnasoftInputType } from \"./component-input-types\";\nimport { isBoolean, isNumber, isString } from \"../utils\";\n\nexport function parseRegisteredComponentInfo(\n  sys: DevToolsSys,\n  cmpInfo: ComponentInfo,\n  cmpObjLit: ts.ObjectLiteralExpression\n) {\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"name\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.name = p.initializer.text;\n      continue;\n    }\n\n    if (propName === \"description\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.description = p.initializer.text;\n      continue;\n    }\n\n    if (propName === \"image\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.image = p.initializer.text;\n      continue;\n    }\n\n    if (\n      propName === \"inputs\" &&\n      sys.ts.isArrayLiteralExpression(p.initializer)\n    ) {\n      const registeredInputs = parseRegisteredComponentInputs(\n        sys,\n        p.initializer\n      );\n      mergeComponentInputs(cmpInfo, registeredInputs);\n      continue;\n    }\n\n    if (\n      propName === \"meta\" &&\n      sys.ts.isObjectLiteralExpression(p.initializer)\n    ) {\n      const meta = expressionToValue(sys, p.initializer);\n      if (meta && typeof meta === \"object\") {\n        cmpInfo.meta = meta;\n      }\n      continue;\n    }\n  }\n\n  return cmpInfo;\n}\n\nfunction parseRegisteredComponentInputs(\n  sys: DevToolsSys,\n  arr: ts.ArrayLiteralExpression\n) {\n  const inputs: ComponentInput[] = [];\n  for (const elm of arr.elements) {\n    if (sys.ts.isObjectLiteralExpression(elm)) {\n      inputs.push(parseRegisteredComponentInput(sys, elm));\n    }\n  }\n  return inputs;\n}\n\nfunction parseRegisteredComponentInput(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression\n) {\n  const khulnasoftInput = expressionToValue(sys, obj) as KhulnasoftInput;\n  const cmpInput = normalizeKhulnasoftInput(khulnasoftInput);\n  cmpInput.isRegistered = true;\n  return cmpInput;\n}\n\nexport function updateComponentObjLiteralInfoProperties(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n  cmpInfo: ComponentInfo\n) {\n  const khulnasoftCmp = mapDevToolsCmpToKhulnasoftCmp(cmpInfo);\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"name\",\n    khulnasoftCmp.name,\n    false\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"description\",\n    khulnasoftCmp.description\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"image\",\n    khulnasoftCmp.image\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"meta\",\n    //@ts-expect-error waiting on updated @khulnasoft.com/sdk release\n    khulnasoftCmp.meta\n  );\n\n  cmpObjExp = updateComponentObjLiteralInputsProperty(\n    sys,\n    cmpObjExp,\n    khulnasoftCmp\n  );\n\n  return sortComponentInfoProperties(sys, cmpObjExp);\n}\n\nfunction updateComponentObjLiteralInputsProperty(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n  khulnasoftCmp: KhulnasoftComponent\n) {\n  let arrExp: ts.ArrayLiteralExpression | null = null;\n\n  const props = cmpObjExp.properties.filter((p) => {\n    return sys.ts.isPropertyAssignment(p) && sys.ts.isIdentifier(p.name);\n  }) as ts.PropertyAssignment[];\n\n  const inputsIndex = props.findIndex((p) => {\n    return sys.ts.isIdentifier(p.name) && p.name.text === \"inputs\";\n  });\n\n  const inputs = [...(khulnasoftCmp.inputs ?? [])];\n\n  if (inputsIndex > -1) {\n    // already have an inputs property\n    if (inputs.length === 0) {\n      // no registered inputs, so remove the inputs property\n      return setObjectExpressionProperty(sys, cmpObjExp, \"inputs\", null);\n    }\n\n    const inputsObj = props[inputsIndex];\n    if (\n      sys.ts.isPropertyAssignment(inputsObj) &&\n      sys.ts.isArrayLiteralExpression(inputsObj.initializer)\n    ) {\n      arrExp = inputsObj.initializer;\n    }\n  }\n\n  if (inputs.length === 0) {\n    return cmpObjExp;\n  }\n\n  arrExp = updateComponentInputsArrayLiteralExp(\n    sys,\n    arrExp || sys.ts.factory.createArrayLiteralExpression(),\n    inputs\n  );\n\n  if (inputsIndex > -1) {\n    props[inputsIndex] = sys.ts.factory.updatePropertyAssignment(\n      props[inputsIndex],\n      props[inputsIndex].name,\n      arrExp\n    );\n  } else {\n    props.push(sys.ts.factory.createPropertyAssignment(\"inputs\", arrExp));\n  }\n\n  return sys.ts.factory.updateObjectLiteralExpression(cmpObjExp, props);\n}\n\nfunction mapDevToolsCmpToKhulnasoftCmp(cmpInfo: ComponentInfo) {\n  // use the type from @khulnasoft.com/sdk to ensure we're correct\n  const khulnasoftCmp: KhulnasoftComponent = {\n    name: cmpInfo.name,\n    description: cmpInfo.description,\n    image: cmpInfo.image,\n    inputs: (cmpInfo.inputs || [])\n      .filter((i) => i.isRegistered)\n      .map(mapDevToolsInputToKhulnasoftInput),\n    ...(cmpInfo.meta ? { meta: { ...cmpInfo.meta } } : {}),\n  };\n  return khulnasoftCmp;\n}\n\nfunction mapDevToolsInputToKhulnasoftInput(cmpInput: ComponentInput) {\n  // use the type from @khulnasoft.com/sdk to ensure we're correct\n  const khulnasoftInput: KhulnasoftInput = {\n    name: cmpInput.name,\n    type: cmpInput.type,\n  };\n\n  if (\n    isString(cmpInput.defaultValue) ||\n    isNumber(cmpInput.defaultValue) ||\n    isBoolean(cmpInput.defaultValue)\n  ) {\n    khulnasoftInput.defaultValue = cmpInput.defaultValue;\n  }\n  if (isString(cmpInput.friendlyName)) {\n    khulnasoftInput.friendlyName = cmpInput.friendlyName;\n  }\n  if (isString(cmpInput.helperText)) {\n    khulnasoftInput.helperText = cmpInput.helperText;\n  }\n  if (cmpInput.required === true) {\n    khulnasoftInput.required = true;\n  }\n  if (Array.isArray(cmpInput.enum)) {\n    khulnasoftInput.enum = cmpInput.enum;\n  }\n  if (cmpInput.hideFromUI === true) {\n    khulnasoftInput.hideFromUI = true;\n  }\n  if (\n    typeof cmpInput.meta === \"object\" &&\n    cmpInput.meta != null &&\n    Object.keys(cmpInput.meta).length > 0\n  ) {\n    khulnasoftInput.meta = cmpInput.meta;\n  }\n\n  return khulnasoftInput;\n}\n\nexport function updateComponentInputsArrayLiteralExp(\n  sys: DevToolsSys,\n  arrExp: ts.ArrayLiteralExpression,\n  inputs: ComponentInput[]\n) {\n  let objLiteralExps = arrExp.elements.filter((elm) => {\n    if (!sys.ts.isObjectLiteralExpression(elm)) {\n      return false;\n    }\n\n    const inputName = elm.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n\n    if (!inputName) {\n      return false;\n    }\n\n    const inputValue = inputName.initializer;\n    if (!sys.ts.isStringLiteral(inputValue)) {\n      return false;\n    }\n\n    return inputs.some((i) => i.name === inputValue.text);\n  }) as ts.ObjectLiteralExpression[];\n\n  for (const input of inputs) {\n    objLiteralExps = updateComponentInputObjLiteralExp(\n      sys,\n      objLiteralExps,\n      input\n    );\n  }\n\n  objLiteralExps.sort((a, b) => {\n    const aProp = a.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n    const bProp = b.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n\n    const aInit = aProp?.initializer;\n    const bInit = bProp?.initializer;\n\n    const aName = aInit && sys.ts.isStringLiteral(aInit) ? aInit.text : \"zz\";\n    const bName = bInit && sys.ts.isStringLiteral(bInit) ? bInit.text : \"zz\";\n\n    return aName.toLowerCase().localeCompare(bName.toLowerCase());\n  });\n\n  return sys.ts.factory.updateArrayLiteralExpression(arrExp, objLiteralExps);\n}\n\nfunction updateComponentInputObjLiteralExp(\n  sys: DevToolsSys,\n  objLiteralExps: ts.ObjectLiteralExpression[],\n  input: ComponentInput\n) {\n  const index = objLiteralExps.findIndex((obj) => {\n    return obj.properties.some((prop) => {\n      const propName = getTextOfPropertyName(sys, prop);\n      return (\n        sys.ts.isPropertyAssignment(prop) &&\n        propName === \"name\" &&\n        sys.ts.isStringLiteral(prop.initializer) &&\n        prop.initializer.text === input.name\n      );\n    });\n  });\n\n  if (index > -1) {\n    objLiteralExps[index] = updateComponentInputValue(\n      sys,\n      objLiteralExps[index],\n      input\n    );\n  } else {\n    const newInputObj = updateComponentInputValue(\n      sys,\n      sys.ts.factory.createObjectLiteralExpression(\n        [\n          sys.ts.factory.createPropertyAssignment(\n            \"name\",\n            sys.ts.factory.createStringLiteral(input.name)\n          ),\n        ],\n        true\n      ),\n      input\n    );\n    objLiteralExps.push(newInputObj);\n  }\n\n  return objLiteralExps;\n}\n\nfunction updateComponentInputValue(\n  sys: DevToolsSys,\n  objLiteralExp: ts.ObjectLiteralExpression,\n  input: ComponentInput\n) {\n  let propAssignments = objLiteralExp.properties.filter((p) =>\n    sys.ts.isPropertyAssignment(p)\n  ) as ts.PropertyAssignment[];\n\n  const inputKeys = (Object.keys(input) as (keyof ComponentInput)[]).filter(\n    (k) => k !== \"isRegistered\"\n  );\n\n  for (const inputKey of inputKeys) {\n    propAssignments = updateComponentInputPropAssignment(\n      sys,\n      propAssignments,\n      input,\n      inputKey\n    );\n  }\n\n  propAssignments = sortComponentInputProperties(\n    sys,\n    propAssignments.filter((p) => {\n      const propName = getTextOfPropertyName(sys, p) as any;\n      return inputKeys.includes(propName);\n    })\n  );\n\n  return sys.ts.factory.updateObjectLiteralExpression(\n    objLiteralExp,\n    propAssignments\n  );\n}\n\nfunction updateComponentInputPropAssignment(\n  sys: DevToolsSys,\n  propAssignments: ts.PropertyAssignment[],\n  input: ComponentInput,\n  inputKey: keyof ComponentInput\n) {\n  const propIndex = propAssignments.findIndex(\n    (p) => sys.ts.isIdentifier(p.name) && p.name.text === inputKey\n  );\n\n  if (propIndex > -1) {\n    propAssignments[propIndex] = sys.ts.factory.updatePropertyAssignment(\n      propAssignments[propIndex],\n      propAssignments[propIndex].name,\n      valueToExpression(sys, input[inputKey])\n    );\n  } else {\n    propAssignments.push(\n      sys.ts.factory.createPropertyAssignment(\n        inputKey as string,\n        valueToExpression(sys, input[inputKey])\n      )\n    );\n  }\n\n  return propAssignments;\n}\n\nexport function mergeComponentInputs(\n  cmp: ComponentInfo,\n  inputs: ComponentInput[]\n) {\n  for (const input of inputs) {\n    const i = cmp.inputs.findIndex((i) => i.name === input.name);\n    if (i > -1) {\n      if (input.isRegistered || !cmp.inputs[i].isRegistered) {\n        cmp.inputs[i] = input;\n      }\n    } else {\n      cmp.inputs.push(input);\n    }\n  }\n  cmp.acceptsChildren = componentAcceptsChildren(cmp);\n}\n\nfunction normalizeKhulnasoftInput(khulnasoftInput: KhulnasoftInput) {\n  const normalizedKhulnasoftType = normalizeKhulnasoftInputType(khulnasoftInput.type);\n\n  const cmpInput: ComponentInput = {\n    name: khulnasoftInput.name.trim(),\n    type: normalizedKhulnasoftType.khulnasoftType,\n  };\n\n  if (\n    isString(khulnasoftInput.friendlyName) &&\n    khulnasoftInput.friendlyName.trim() !== khulnasoftInput.name.trim()\n  ) {\n    cmpInput.friendlyName = khulnasoftInput.friendlyName;\n  }\n\n  if (\n    isString(khulnasoftInput.defaultValue) ||\n    isNumber(khulnasoftInput.defaultValue) ||\n    isBoolean(khulnasoftInput.defaultValue)\n  ) {\n    cmpInput.defaultValue = khulnasoftInput.defaultValue;\n  }\n\n  if (isString(khulnasoftInput.helperText)) {\n    cmpInput.helperText = khulnasoftInput.helperText;\n  }\n\n  if (isBoolean(khulnasoftInput.required)) {\n    cmpInput.required = khulnasoftInput.required;\n  }\n\n  if (\n    typeof khulnasoftInput.meta === \"object\" &&\n    khulnasoftInput.meta != null &&\n    Object.keys(khulnasoftInput.meta).length > 0\n  ) {\n    cmpInput.meta = khulnasoftInput.meta;\n  }\n\n  if (Array.isArray(khulnasoftInput.enum) && khulnasoftInput.enum.length > 0) {\n    cmpInput.enum = khulnasoftInput.enum;\n  }\n\n  if (khulnasoftInput.hideFromUI === true) {\n    cmpInput.hideFromUI = true;\n  }\n\n  return normalizeComponentInput(cmpInput);\n}\n\nexport function componentAcceptsChildren(cmp: ComponentInfo) {\n  // if the component has a children prop, set acceptsChildren to true\n  const hasChildrenProp = cmp.inputs.some((i) => i.name === \"children\");\n  const hasJsxProp = cmp.inputs.some((i) => i.meta?.ts === \"ReactNode\");\n  if (hasChildrenProp || hasJsxProp || cmp.acceptsChildren === true) {\n    // set acceptsChildren to true, which will add the withChildren() wrapper\n    return true;\n  }\n  return false;\n}\n\nexport function normalizeComponentInput(input: ComponentInput) {\n  if (input.name === \"children\") {\n    input.hideFromUI = true;\n    delete input.required;\n  }\n\n  if (input.type === \"object\" && input.defaultValue == null) {\n    input.hideFromUI = true;\n  }\n\n  if (input.type === \"list\" && input.defaultValue == null) {\n    input.hideFromUI = true;\n  }\n\n  if (input.meta) {\n    let tsType = input.meta.ts;\n    if (typeof tsType === \"string\") {\n      tsType = tsType.trim();\n      if (tsType.endsWith(\"ReactNode\")) {\n        tsType = \"ReactNode\";\n      }\n      input.meta.ts = tsType;\n\n      if (tsType === \"ReactNode\") {\n        input.hideFromUI = true;\n      }\n    }\n  }\n\n  return input;\n}\n\nfunction sortComponentInfoProperties(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression\n) {\n  const props = [...cmpObjExp.properties].sort((a, b) => {\n    const aName = getTextOfPropertyName(sys, a) || \"zz\";\n    const bName = getTextOfPropertyName(sys, b) || \"zz\";\n\n    if (aName === \"inputs\") return 1;\n\n    const aIndex = INFO_PROP_SORT.indexOf(aName);\n    const bIndex = INFO_PROP_SORT.indexOf(bName);\n    if (aIndex > -1) {\n      if (bIndex > -1 && aIndex > bIndex) {\n        return 1;\n      }\n      return -1;\n    }\n\n    if (bIndex > -1) {\n      if (aIndex > -1 && bIndex < aIndex) {\n        return -1;\n      }\n      return 1;\n    }\n\n    return aName.localeCompare(bName);\n  });\n\n  return sys.ts.factory.updateObjectLiteralExpression(cmpObjExp, props);\n}\n\nconst INFO_PROP_SORT = [\"component\", \"name\", \"description\"];\n\nfunction sortComponentInputProperties(\n  sys: DevToolsSys,\n  propAssignments: ts.PropertyAssignment[]\n) {\n  const props = [...propAssignments].sort((a, b) => {\n    const aName = getTextOfPropertyName(sys, a) || \"zz\";\n    const bName = getTextOfPropertyName(sys, b) || \"zz\";\n\n    const aIndex = INPUT_PROP_SORT.indexOf(aName);\n    const bIndex = INPUT_PROP_SORT.indexOf(bName);\n    if (aIndex > -1) {\n      if (bIndex > -1 && aIndex > bIndex) {\n        return 1;\n      }\n      return -1;\n    }\n\n    if (bIndex > -1) {\n      if (aIndex > -1 && bIndex < aIndex) {\n        return -1;\n      }\n      return 1;\n    }\n\n    return aName.localeCompare(bName);\n  });\n\n  return props;\n}\n\nconst INPUT_PROP_SORT = [\"name\", \"type\"];\n\nexport function componentHasAcceptChildrenProp(\n  sys: DevToolsSys,\n  cmpObjLit: ts.ObjectLiteralExpression\n): boolean {\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n    if (propName === \"canHaveChildren\") {\n      const { initializer } = p;\n      if (initializer.kind === sys.ts.SyntaxKind.TrueKeyword) {\n        return true;\n      }\n      return false;\n    }\n  }\n  return false;\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { NextDevToolsSys } from \".\";\nimport { codeToStatement } from \"../../../common/ast/transform\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { updateComponentObjLiteralInfoProperties } from \"../../../common/ast/component-info\";\n\nexport function createNextRegisteredComponent(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  let code = `Khulnasoft.registerComponent(\\n`;\n\n  if (sys.appDir) {\n    // app dir\n\n    if (cmpInfo.acceptsChildren) {\n      code += `  withChildren(${cmpInfo.importName}),\\n`;\n    } else {\n      code += `  ${cmpInfo.importName},\\n`;\n    }\n  } else {\n    // not app dir\n    // use dynamic imports\n    const importPath = cmpInfo.externalImportPath\n      ? cmpInfo.externalImportPath\n      : getImportPath(sys, sys.registryPath, cmpInfo.filePath);\n    if (cmpInfo.exportName === \"default\") {\n      if (cmpInfo.acceptsChildren) {\n        code += `  withChildren(dynamic(() => import(${JSON.stringify(\n          importPath\n        )}))),\\n`;\n      } else {\n        code += `  dynamic(() => import(${JSON.stringify(importPath)})),\\n`;\n      }\n    } else {\n      if (cmpInfo.acceptsChildren) {\n        code += `  withChildren(dynamic(async () => (await import(${JSON.stringify(\n          importPath\n        )})).${cmpInfo.exportName})),\\n`;\n      } else {\n        code += `  dynamic(async () => (await import(${JSON.stringify(\n          importPath\n        )})).${cmpInfo.exportName}),\\n`;\n      }\n    }\n  }\n\n  code += `  {\n    name: \"${cmpInfo.name}\",\n  }\\n`;\n  code += `);`;\n\n  const registerStatement = codeToStatement(sys, code);\n\n  return updateNextRegisteredComponent(sys, registerStatement, cmpInfo);\n}\n\nexport function updateNextRegisteredComponent(\n  sys: NextDevToolsSys,\n  registerStatement: ts.Statement,\n  cmpInfo: ComponentInfo\n) {\n  if (!sys.ts.isExpressionStatement(registerStatement)) {\n    return registerStatement;\n  }\n\n  const callExp = registerStatement.expression;\n  if (!sys.ts.isCallExpression(callExp)) {\n    return registerStatement;\n  }\n\n  const args = [...callExp.arguments];\n  if (args.length < 2) {\n    return registerStatement;\n  }\n\n  if (cmpInfo.acceptsChildren) {\n    // Khulnasoft.registerComponent( withChildren(Component, { ... }) )\n    if (\n      sys.ts.isCallExpression(args[0]) &&\n      sys.ts.isIdentifier(args[0].expression) &&\n      args[0].expression.text === \"withChildren\"\n    ) {\n      // withChildren() already wrapping first arg\n      // do nothing\n    } else {\n      // withChildren() not wrapping first arg, wrap it\n      args[0] = sys.ts.factory.createCallExpression(\n        sys.ts.factory.createIdentifier(\"withChildren\"),\n        undefined,\n        [args[0]]\n      );\n    }\n  } else {\n    // Khulnasoft.registerComponent( Component, { ... } )\n    if (\n      sys.ts.isCallExpression(args[0]) &&\n      sys.ts.isIdentifier(args[0].expression) &&\n      args[0].expression.text === \"withChildren\"\n    ) {\n      // withChildren() wrapping first arg, unwrap it\n      args[0] = args[0].arguments[0];\n    } else {\n      // withChildren() not wrapping first arg\n      // do nothing\n    }\n  }\n\n  const cmpObjExp = args[1];\n  if (!sys.ts.isObjectLiteralExpression(cmpObjExp)) {\n    return registerStatement;\n  }\n\n  args[1] = updateComponentObjLiteralInfoProperties(sys, cmpObjExp, cmpInfo);\n\n  return sys.ts.factory.updateExpressionStatement(\n    registerStatement,\n    sys.ts.factory.updateCallExpression(\n      callExp,\n      callExp.expression,\n      callExp.typeArguments,\n      args\n    )\n  );\n}\n", "import type ts from \"typescript\";\nimport type {\n  DevToolsSys,\n  TranspileFileOptions,\n  TranspileModuleOptions,\n  TranspileResult,\n} from \"../types\";\nimport { codeToSource } from \"./ast/transform\";\nimport { clone } from \"./utils\";\nimport { findUpNodeModules } from \"./fs\";\n\nexport async function createTsProgram(\n  sys: DevToolsSys,\n  filePaths: string[],\n  overrideTsOptions?: ts.CompilerOptions\n) {\n  if (!Array.isArray(filePaths) || filePaths.length === 0) {\n    throw new Error(`createTsProgram() Invalid filePaths: ${filePaths}`);\n  }\n\n  const nodeModulesPath = await findUpNodeModules(sys, filePaths[0]);\n  const tsLibDir = sys.join(nodeModulesPath, \"typescript\", \"lib\");\n\n  const existsCache = new Map<string, boolean>();\n\n  const host: ts.CompilerHost = {\n    fileExists: (p) => {\n      p = sys.normalize(p);\n\n      if (p.includes(\"node_modules\")) {\n        let nm = NODE_MODULE_CACHE.get(p);\n        if (!nm) {\n          try {\n            const stat = sys.statSync(p);\n            if (stat.isFile()) {\n              nm = { exists: true, content: sys.readFileSync(p) };\n            } else {\n              nm = { exists: false };\n            }\n          } catch (e) {\n            nm = { exists: false };\n          }\n          NODE_MODULE_CACHE.set(p, nm);\n        }\n        return nm.exists;\n      }\n\n      if (!existsCache.has(p)) {\n        existsCache.set(p, sys.existsSync(p));\n      }\n\n      return existsCache.get(p)!;\n    },\n    getCanonicalFileName: (p) => sys.normalize(p),\n    getCurrentDirectory: () => sys.cwd(),\n    getDefaultLibFileName: () => sys.join(tsLibDir, \"lib.d.ts\"),\n    getDefaultLibLocation: () => tsLibDir,\n    getNewLine: () => \"\\n\",\n    getSourceFile: (p) => {\n      p = sys.normalize(p);\n\n      if (p.includes(\"node_modules\")) {\n        const nm = NODE_MODULE_CACHE.get(p);\n        if (nm) {\n          return codeToSource(sys, nm.content);\n        }\n      }\n\n      let c: string | null | undefined = sys.readFileSync(p);\n      if (c == null) {\n        const fileName = sys.basename(p);\n        const ext = sys.extname(fileName).toLowerCase();\n        if (p.startsWith(tsLibDir) && ext === \".ts\") {\n          c = LIB_CACHE.get(fileName);\n          if (\n            c == null &&\n            typeof self !== \"undefined\" &&\n            typeof fetch === \"function\"\n          ) {\n            throw new MissingTsLibError(fileName);\n          }\n        }\n      }\n\n      if (p.includes(\"node_modules\")) {\n        if (c) {\n          NODE_MODULE_CACHE.set(p, { exists: true, content: c });\n        } else {\n          NODE_MODULE_CACHE.set(p, { exists: false });\n        }\n      }\n\n      return codeToSource(sys, c);\n    },\n    readFile: (p) => {\n      const content = sys.readFileSync(p);\n      return typeof content === \"string\" ? content : undefined;\n    },\n    useCaseSensitiveFileNames: () => false,\n    writeFile: () => {},\n  };\n\n  while (true) {\n    try {\n      return createHostProgram(sys, host, filePaths, overrideTsOptions);\n    } catch (e) {\n      if (e instanceof MissingTsLibError) {\n        await fetchLib(sys, e.libName);\n        continue;\n      }\n      console.error(`createTsProgram`, e);\n      throw new Error(\n        `createTsProgram() Could not create program for: ${filePaths[0]}`\n      );\n    }\n  }\n}\n\nfunction createHostProgram(\n  sys: DevToolsSys,\n  host: ts.CompilerHost,\n  filePaths: string[],\n  overrideTsOptions?: ts.CompilerOptions\n) {\n  const programOpts: ts.CreateProgramOptions = {\n    rootNames: [...filePaths],\n    options: {},\n    host,\n  };\n\n  const tsConfigPath = sys.ts.findConfigFile(sys.dirname(filePaths[0]), (p) =>\n    sys.existsSync(p)\n  );\n\n  if (tsConfigPath) {\n    let options = TSCONFIG_CACHE.get(tsConfigPath);\n    if (!options) {\n      const configFile = sys.ts.readConfigFile(tsConfigPath, (p) => {\n        const content = sys.readFileSync(p);\n        return typeof content === \"string\" ? content : undefined;\n      });\n\n      if (!configFile.error) {\n        const tsConfig = sys.ts.parseJsonConfigFileContent(\n          configFile.config,\n          sys.ts.sys || {\n            useCaseSensitiveFileNames: false,\n            readDirectory: (p, _) => sys.readdirSync(p),\n            fileExists: (p) => sys.existsSync(p),\n            readFile: (p) => sys.readFileSync(p) || undefined,\n          },\n          sys.dirname(tsConfigPath),\n          undefined,\n          tsConfigPath\n        );\n        options = tsConfig.options;\n        TSCONFIG_CACHE.set(tsConfigPath, options);\n      } else {\n        console.error(\"error reading tsconfig for createTsProgram\");\n      }\n    }\n    if (options) {\n      programOpts.options = clone(options);\n    }\n  }\n\n  programOpts.options.noEmit = true;\n  programOpts.options.isolatedModules = false;\n  programOpts.options.strict = false;\n  programOpts.options.jsx = sys.ts.JsxEmit.Preserve;\n  programOpts.options.allowJs = true;\n  Object.assign(programOpts.options, overrideTsOptions);\n\n  return sys.ts.createProgram(programOpts);\n}\n\nexport async function getTypeChecker(\n  sys: DevToolsSys,\n  filePath: string,\n  tsProgram: ts.Program | null\n) {\n  if (!tsProgram) {\n    tsProgram = await createTsProgram(sys, [filePath]);\n  }\n\n  const sourceFile = tsProgram.getSourceFile(filePath);\n  if (!sourceFile) {\n    throw new Error(`getTypeChecker() Could not find source file: ${filePath}`);\n  }\n  const typeChecker = tsProgram.getTypeChecker();\n  return {\n    typeChecker,\n    sourceFile,\n  };\n}\n\nclass MissingTsLibError {\n  constructor(public libName: string) {}\n}\n\nasync function fetchLib(sys: DevToolsSys, libName: string) {\n  const libUrl = `https://cdn.jsdelivr.net/npm/typescript@${sys.ts.version}/lib/${libName}`;\n\n  if (!PENDING_LIB_CACHE.has(libName)) {\n    PENDING_LIB_CACHE.set(\n      libName,\n      fetch(libUrl)\n        .then((rsp) => rsp.text())\n        .then((content) => {\n          LIB_CACHE.set(libName, content);\n        })\n    );\n  }\n  await PENDING_LIB_CACHE.get(libName);\n  PENDING_LIB_CACHE.delete(libName);\n}\n\nconst LIB_CACHE = new Map<string, string>();\nconst PENDING_LIB_CACHE = new Map<string, Promise<void>>();\nconst NODE_MODULE_CACHE = new Map<\n  string,\n  { exists: boolean; content?: string | null }\n>();\nconst TSCONFIG_CACHE = new Map<string, ts.CompilerOptions>();\n\nexport async function transpileFile(\n  sys: DevToolsSys,\n  opts: TranspileFileOptions\n) {\n  const code = await sys.readFile(opts.filePath);\n  if (code == null) {\n    const result: TranspileResult = {\n      diagnostics: [\n        {\n          messageText: `Error reading: ${opts.filePath}`,\n        },\n      ],\n      code: null,\n      output: null,\n    };\n    return result;\n  }\n\n  return transpileModule(sys, {\n    code,\n    filePath: opts.filePath,\n    compilerOptions: opts.compilerOptions,\n  });\n}\n\nexport function transpileModule(\n  sys: DevToolsSys,\n  opts: TranspileModuleOptions\n) {\n  const result: TranspileResult = {\n    diagnostics: [],\n    code: opts.code,\n    output: null,\n  };\n\n  try {\n    const output = sys.ts.transpileModule(opts.code, {\n      compilerOptions: opts.compilerOptions,\n      fileName: opts.filePath ?? \"module.tsx\",\n      reportDiagnostics: true,\n    });\n\n    output.diagnostics?.forEach((d) => {\n      result.diagnostics.push({\n        messageText: String(d.messageText),\n      });\n    });\n\n    result.output = output.outputText;\n  } catch (e) {\n    console.error(`transpileModule`, e);\n    result.diagnostics.push({\n      messageText: String(e),\n    });\n  }\n\n  return result;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\n\nexport function ensureImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureImportOptions,\n  moduleType: ModuleFormat = \"esm\"\n) {\n  if (Array.isArray(opts.namedImports)) {\n    opts.namedImports.forEach((namedImport) => {\n      sourceFile = ensureNamedImport(\n        sys,\n        sourceFile,\n        namedImport,\n        opts.importPath,\n        !!opts.isTypeOnly,\n        moduleType\n      );\n    });\n  }\n  if (typeof opts.defaultImport === \"string\") {\n    sourceFile = ensureDefaultImport(\n      sys,\n      sourceFile,\n      opts.defaultImport,\n      opts.importPath,\n      moduleType\n    );\n  }\n  return sourceFile;\n}\n\nfunction ensureNamedImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  namedImport: string,\n  importPath: string,\n  isTypeOnly: boolean,\n  moduleType: ModuleFormat\n) {\n  if (moduleType === \"cjs\") {\n    return ensureCjsImports(sys, sourceFile, null, namedImport, importPath);\n  } else {\n    return ensureEsmImports(\n      sys,\n      sourceFile,\n      null,\n      namedImport,\n      importPath,\n      isTypeOnly\n    );\n  }\n}\n\nfunction ensureDefaultImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string,\n  importPath: string,\n  moduleType: ModuleFormat\n) {\n  if (moduleType === \"cjs\") {\n    return ensureCjsImports(sys, sourceFile, defaultImport, null, importPath);\n  } else {\n    return ensureEsmImports(\n      sys,\n      sourceFile,\n      defaultImport,\n      null,\n      importPath,\n      false\n    );\n  }\n}\n\nfunction ensureEsmImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string | null,\n  namedImport: string | null,\n  importPath: string,\n  isTypeOnly: boolean\n) {\n  const statements = [...sourceFile.statements];\n  let lastImportIndex = 0;\n  let madeNameImportChange = false;\n  let madeDefaultImportChange = false;\n\n  for (let i = 0; i < statements.length; i++) {\n    const n = statements[i];\n    if (!sys.ts.isImportDeclaration(n)) {\n      continue;\n    }\n    lastImportIndex = i;\n    if (!n.moduleSpecifier || !sys.ts.isStringLiteral(n.moduleSpecifier)) {\n      continue;\n    }\n    if (n.moduleSpecifier.text !== importPath) {\n      continue;\n    }\n    if (!!n.importClause?.isTypeOnly !== isTypeOnly) {\n      continue;\n    }\n\n    const existingNamedImports: ts.ImportSpecifier[] = [];\n    const namedImports = n.importClause?.namedBindings;\n    if (\n      namedImports &&\n      sys.ts.isNamedImports(namedImports) &&\n      namedImports.elements\n    ) {\n      existingNamedImports.push(...namedImports.elements);\n    }\n\n    if (typeof namedImport === \"string\") {\n      if (existingNamedImports.some((e) => e.name.text === namedImport)) {\n        return sourceFile;\n      }\n\n      existingNamedImports.push(\n        sys.ts.factory.createImportSpecifier(\n          false,\n          undefined,\n          sys.ts.factory.createIdentifier(namedImport)\n        )\n      );\n      existingNamedImports.sort((a, b) => {\n        return a.name.text.localeCompare(b.name.text);\n      });\n      madeNameImportChange = true;\n    }\n\n    let defaultIdentifier = n.importClause ? n.importClause.name : undefined;\n    if (typeof defaultImport === \"string\") {\n      if (defaultIdentifier && defaultIdentifier.text === defaultImport) {\n        return sourceFile;\n      }\n      defaultIdentifier = sys.ts.factory.createIdentifier(defaultImport);\n      madeDefaultImportChange = true;\n    }\n\n    if (madeNameImportChange || madeDefaultImportChange) {\n      statements[i] = sys.ts.factory.updateImportDeclaration(\n        n,\n        undefined,\n        sys.ts.factory.createImportClause(\n          isTypeOnly,\n          defaultIdentifier,\n          sys.ts.factory.createNamedImports(existingNamedImports)\n        ),\n        n.moduleSpecifier,\n        undefined\n      );\n      return sys.ts.factory.updateSourceFile(sourceFile, statements);\n    }\n  }\n\n  let defaultIdentifier: ts.Identifier = undefined as any;\n  let namedBindings: ts.NamedImports = undefined as any;\n\n  if (typeof defaultImport === \"string\") {\n    defaultIdentifier = sys.ts.factory.createIdentifier(defaultImport);\n  }\n\n  if (typeof namedImport === \"string\") {\n    namedBindings = sys.ts.factory.createNamedImports([\n      sys.ts.factory.createImportSpecifier(\n        false,\n        undefined,\n        sys.ts.factory.createIdentifier(namedImport)\n      ),\n    ]);\n  }\n\n  const newImport = sys.ts.factory.createImportDeclaration(\n    undefined,\n    sys.ts.factory.createImportClause(\n      isTypeOnly,\n      defaultIdentifier,\n      namedBindings\n    ),\n    sys.ts.factory.createStringLiteral(importPath)\n  );\n  statements.splice(lastImportIndex, 0, newImport);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nfunction ensureCjsImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string | null,\n  namedImport: string | null,\n  importPath: string\n) {\n  const statements = [...sourceFile.statements];\n  let lastRequireIndex = 0;\n\n  for (let i = 0; i < statements.length; i++) {\n    const varStatement = statements[i];\n    if (!sys.ts.isVariableStatement(varStatement)) {\n      continue;\n    }\n\n    for (let d = 0; d < varStatement.declarationList.declarations.length; d++) {\n      const declarations = [...varStatement.declarationList.declarations];\n      const decl = declarations[d];\n      const requireCallExp = decl.initializer;\n\n      if (!requireCallExp || !sys.ts.isCallExpression(requireCallExp)) {\n        continue;\n      }\n      const requireCallExpName = requireCallExp.expression;\n      if (!sys.ts.isIdentifier(requireCallExpName)) {\n        continue;\n      }\n      if (requireCallExpName.text !== \"require\") {\n        continue;\n      }\n      if (requireCallExp.arguments.length !== 1) {\n        continue;\n      }\n      const requireCallExpArg = requireCallExp.arguments[0];\n      if (!sys.ts.isStringLiteral(requireCallExpArg)) {\n        continue;\n      }\n      lastRequireIndex = i;\n      if (requireCallExpArg.text !== importPath) {\n        continue;\n      }\n\n      if (sys.ts.isIdentifier(decl.name) && typeof defaultImport === \"string\") {\n        if (decl.name.text === defaultImport) {\n          return sourceFile;\n        }\n        declarations[d] = sys.ts.factory.updateVariableDeclaration(\n          decl,\n          sys.ts.factory.createIdentifier(defaultImport),\n          decl.exclamationToken,\n          decl.type,\n          decl.initializer\n        );\n\n        statements[i] = sys.ts.factory.updateVariableStatement(\n          varStatement,\n          varStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            varStatement.declarationList,\n            declarations\n          )\n        );\n        return sys.ts.factory.updateSourceFile(sourceFile, statements);\n      }\n\n      if (\n        sys.ts.isObjectBindingPattern(decl.name) &&\n        typeof namedImport === \"string\"\n      ) {\n        const elements = [...decl.name.elements];\n\n        const hasNamedBinding = elements.some((e) => {\n          if (!sys.ts.isBindingElement(e) || !sys.ts.isIdentifier(e.name)) {\n            return false;\n          }\n          return e.name.text === namedImport;\n        });\n        if (hasNamedBinding) {\n          return sourceFile;\n        }\n\n        elements.push(\n          sys.ts.factory.createBindingElement(undefined, undefined, namedImport)\n        );\n\n        elements.sort((a, b) => {\n          if (!sys.ts.isBindingElement(a) || !sys.ts.isIdentifier(a.name)) {\n            return 0;\n          }\n          if (!sys.ts.isBindingElement(b) || !sys.ts.isIdentifier(b.name)) {\n            return 0;\n          }\n          return a.name.text.localeCompare(b.name.text);\n        });\n\n        declarations[d] = sys.ts.factory.updateVariableDeclaration(\n          decl,\n          sys.ts.factory.createObjectBindingPattern(elements),\n          decl.exclamationToken,\n          decl.type,\n          decl.initializer\n        );\n\n        statements[i] = sys.ts.factory.updateVariableStatement(\n          varStatement,\n          varStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            varStatement.declarationList,\n            declarations\n          )\n        );\n        return sys.ts.factory.updateSourceFile(sourceFile, statements);\n      }\n    }\n  }\n\n  if (typeof defaultImport === \"string\") {\n    const newRequire = sys.ts.factory.createVariableStatement(\n      undefined,\n      sys.ts.factory.createVariableDeclarationList(\n        [\n          sys.ts.factory.createVariableDeclaration(\n            defaultImport,\n            undefined,\n            undefined,\n            sys.ts.factory.createCallExpression(\n              sys.ts.factory.createIdentifier(\"require\"),\n              undefined,\n              [sys.ts.factory.createStringLiteral(importPath)]\n            )\n          ),\n        ],\n        sys.ts.NodeFlags.Const\n      )\n    );\n    statements.splice(lastRequireIndex, 0, newRequire);\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n\n  if (typeof namedImport === \"string\") {\n    const newRequire = sys.ts.factory.createVariableStatement(\n      undefined,\n      sys.ts.factory.createVariableDeclarationList(\n        [\n          sys.ts.factory.createVariableDeclaration(\n            sys.ts.factory.createObjectBindingPattern([\n              sys.ts.factory.createBindingElement(\n                undefined,\n                undefined,\n                namedImport\n              ),\n            ]),\n            undefined,\n            undefined,\n            sys.ts.factory.createCallExpression(\n              sys.ts.factory.createIdentifier(\"require\"),\n              undefined,\n              [sys.ts.factory.createStringLiteral(importPath)]\n            )\n          ),\n        ],\n        sys.ts.NodeFlags.Const\n      )\n    );\n    statements.splice(lastRequireIndex, 0, newRequire);\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n\n  return sourceFile;\n}\n\nexport interface EnsureImportOptions {\n  defaultImport?: string;\n  namedImports?: string[];\n  importPath: string;\n  isTypeOnly?: boolean;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\n\nexport function getExportedStatements(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  moduleType: ModuleFormat = \"esm\"\n) {\n  if (moduleType === \"cjs\") {\n    return getCjsExportedStatements(sys, sourceFile);\n  } else {\n    return getEsmExportedStatements(sys, sourceFile);\n  }\n}\n\nfunction getEsmExportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isExportDeclaration(s)) {\n      if (s.exportClause && sys.ts.isNamedExports(s.exportClause)) {\n        for (const elm of s.exportClause.elements) {\n          if (s.moduleSpecifier) {\n            exports.push({\n              isDefaultExport: false,\n              statement: s,\n              node: elm,\n            });\n          }\n          if (sys.ts.isIdentifier(elm.name)) {\n            const identifierName = elm.name.text;\n            for (const s2 of sourceFile.statements) {\n              if (sys.ts.isVariableStatement(s2)) {\n                for (const d of s2.declarationList.declarations) {\n                  if (\n                    sys.ts.isIdentifier(d.name) &&\n                    d.name.text === identifierName\n                  ) {\n                    exports.push({\n                      isDefaultExport: false,\n                      statement: s2,\n                      node: s2,\n                    });\n                  }\n                }\n              } else if (sys.ts.isFunctionDeclaration(s2)) {\n                if (s2.name && s2.name.text === identifierName) {\n                  exports.push({\n                    isDefaultExport: false,\n                    statement: s2,\n                    node: s2,\n                  });\n                }\n              }\n            }\n          }\n        }\n      } else if (!s.exportClause && s.moduleSpecifier) {\n        // Handle \"export * from 'module'\" case\n        exports.push({\n          isDefaultExport: false,\n          statement: s,\n          node: s,\n        });\n      }\n      continue;\n    }\n\n    if (sys.ts.isExportAssignment(s)) {\n      const isDefaultExport = s.flags === sys.ts.NodeFlags.None;\n\n      const exportedIdentifier = s.expression;\n      if (sys.ts.isIdentifier(exportedIdentifier)) {\n        const identifierName = exportedIdentifier.text;\n        for (const s2 of sourceFile.statements) {\n          if (sys.ts.isVariableStatement(s2)) {\n            for (const d of s2.declarationList.declarations) {\n              if (\n                sys.ts.isIdentifier(d.name) &&\n                d.name.text === identifierName\n              ) {\n                exports.push({ isDefaultExport, statement: s2, node: s2 });\n              }\n            }\n          }\n          if (sys.ts.isFunctionDeclaration(s2)) {\n            if (s2.name?.text === identifierName) {\n              exports.push({ isDefaultExport, statement: s2, node: s2 });\n            }\n          }\n        }\n      } else if (\n        sys.ts.isArrowFunction(exportedIdentifier) ||\n        sys.ts.isCallExpression(exportedIdentifier) ||\n        sys.ts.isFunctionDeclaration(exportedIdentifier) ||\n        sys.ts.isObjectLiteralExpression(exportedIdentifier)\n      ) {\n        exports.push({\n          isDefaultExport,\n          statement: s,\n          node: exportedIdentifier,\n        });\n      }\n      continue;\n    }\n\n    if (\n      (sys.ts.isVariableStatement(s) || sys.ts.isFunctionDeclaration(s)) &&\n      s.modifiers\n    ) {\n      if (s.modifiers.some((m) => m.kind === sys.ts.SyntaxKind.ExportKeyword)) {\n        exports.push({\n          isDefaultExport: s.modifiers.some(\n            (m) => m.kind === sys.ts.SyntaxKind.DefaultKeyword\n          ),\n          statement: s,\n          node: s,\n        });\n        continue;\n      }\n    }\n  }\n\n  return exports;\n}\n\nfunction getCjsExportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isBinaryExpression(s.expression) &&\n      sys.ts.isPropertyAccessExpression(s.expression.left)\n    ) {\n      const left = s.expression.left;\n      const right = s.expression.right;\n\n      if (!sys.ts.isIdentifier(left.expression)) {\n        continue;\n      }\n\n      if (left.expression.text === \"module\" && left.name.text === \"exports\") {\n        // module.exports = ...\n\n        if (sys.ts.isIdentifier(right)) {\n          // module.exports = identifier;\n          const identifierName = right.text;\n\n          for (const s2 of sourceFile.statements) {\n            if (sys.ts.isVariableStatement(s2)) {\n              for (const d of s2.declarationList.declarations) {\n                if (\n                  sys.ts.isIdentifier(d.name) &&\n                  d.name.text === identifierName\n                ) {\n                  exports.push({\n                    isDefaultExport: true,\n                    statement: s2,\n                    node: s2,\n                  });\n                }\n              }\n            } else if (sys.ts.isFunctionDeclaration(s2)) {\n              if (s2.name && s2.name.text === identifierName) {\n                exports.push({\n                  isDefaultExport: true,\n                  statement: s2,\n                  node: s2,\n                });\n              }\n            }\n          }\n        } else {\n          exports.push({\n            isDefaultExport: true,\n            statement: s,\n            node: right,\n          });\n        }\n\n        continue;\n      }\n    }\n  }\n\n  return exports;\n}\n\nexport interface ExportedStatement {\n  isDefaultExport: boolean;\n  statement: ts.Statement;\n  node: ts.Node;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ExportType } from \"../../types\";\nimport { getDisplayFilePath } from \"../utils\";\n\nexport function getImportPathFromIdentifier(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  identifierName: string\n) {\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(s) && s.importClause) {\n      if (\n        s.importClause.namedBindings &&\n        sys.ts.isNamedImports(s.importClause.namedBindings)\n      ) {\n        for (const elm of s.importClause.namedBindings.elements) {\n          if (\n            sys.ts.isIdentifier(elm.name) &&\n            elm.name.text === identifierName\n          ) {\n            if (sys.ts.isStringLiteral(s.moduleSpecifier)) {\n              return {\n                importPath: s.moduleSpecifier.text,\n                exportType: \"named\" as ExportType,\n              };\n            }\n          }\n        }\n      }\n      if (s.importClause.name && s.importClause.name.text === identifierName) {\n        if (sys.ts.isStringLiteral(s.moduleSpecifier)) {\n          return {\n            importPath: s.moduleSpecifier.text,\n            exportType: \"default\" as ExportType,\n          };\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport async function getFilePathFromIdentifier(\n  sys: DevToolsSys,\n  containerPath: string,\n  sourceFile: ts.SourceFile,\n  identifierName: string\n) {\n  // Traverse the source file to find the import statement and import path\n  const i = getImportPathFromIdentifier(sys, sourceFile, identifierName);\n  if (i) {\n    const filePath = await resolveComponentPath(\n      sys,\n      sys.normalize(sys.resolve(sys.dirname(containerPath), i.importPath))\n    );\n    const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n    return {\n      displayFilePath: getDisplayFilePath(sys, filePath),\n      filePath,\n      relFilePath,\n      importPath: i.importPath,\n      exportType: i.exportType as ExportType,\n    };\n  }\n  return null;\n}\n\nexport function findVariableStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  variableName: string\n) {\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const statement = sourceFile.statements[i];\n    if (sys.ts.isVariableStatement(statement)) {\n      for (const declaration of statement.declarationList.declarations) {\n        if (\n          sys.ts.isIdentifier(declaration.name) &&\n          declaration.name.text === variableName\n        ) {\n          return { statement, statementIndex: i };\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport function findArrayStatementInitializer(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  variableName: string\n) {\n  const s = findVariableStatement(sys, sourceFile, variableName);\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declaration = s.statement.declarationList.declarations[0];\n    if (\n      declaration.initializer &&\n      sys.ts.isArrayLiteralExpression(declaration.initializer)\n    ) {\n      return {\n        statement: s.statement,\n        statementIndex: s.statementIndex,\n        variableDeclaration: declaration,\n        arrayLiteralExp: declaration.initializer,\n      };\n    }\n  }\n  return null;\n}\n\nexport function hasJsxNode(sys: DevToolsSys, n: ts.Node | undefined) {\n  if (n) {\n    if (isJsxNode(sys, n)) {\n      return true;\n    }\n    let foundJsx = false;\n    n.forEachChild((c) => {\n      if (hasJsxNode(sys, c)) {\n        foundJsx = true;\n      }\n    });\n    if (foundJsx) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isJsxNode(sys: DevToolsSys, n: ts.Node) {\n  return (\n    sys.ts.isJsxElement(n) ||\n    sys.ts.isJsxOpeningElement(n) ||\n    sys.ts.isJsxOpeningFragment(n) ||\n    sys.ts.isJsxSelfClosingElement(n) ||\n    sys.ts.isJsxFragment(n) ||\n    sys.ts.isJsxChild(n)\n  );\n}\n\nexport async function resolveComponentPath(sys: DevToolsSys, filePath: string) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \"\" || !RESOLVE_EXTS.includes(ext)) {\n    for (const tryExt of RESOLVE_EXTS) {\n      const checkPath = filePath + tryExt;\n      if (await sys.exists(checkPath)) {\n        return checkPath;\n      }\n    }\n\n    for (const tryExt of RESOLVE_EXTS) {\n      const checkPath = sys.join(filePath, \"index\" + tryExt);\n      if (await sys.exists(checkPath)) {\n        return checkPath;\n      }\n    }\n  }\n  return filePath;\n}\n\nexport const RESOLVE_EXTS = [\".tsx\", \".jsx\", \".ts\", \".js\"];\n", "import type { AppDependency, ComponentInfo, DevToolsSys } from \"../../types\";\nimport type ts from \"typescript\";\nimport { normalizePathSlash } from \"../utils\";\n\nexport function getSourceDependencies(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  fnNode: ts.Node\n) {\n  if (!fnNode || !typeChecker) {\n    return undefined;\n  }\n\n  const symbol = typeChecker.getSymbolAtLocation(fnNode);\n  if (!symbol) {\n    return undefined;\n  }\n\n  const valueDeclaration = symbol.valueDeclaration;\n  if (!valueDeclaration) {\n    return undefined;\n  }\n\n  const filePath = valueDeclaration.getSourceFile().fileName;\n  const moduleName = getModuleNameFromPath(sys, filePath);\n  if (!moduleName) {\n    return undefined;\n  }\n\n  const dep: AppDependency = {\n    name: moduleName,\n  };\n  return [dep];\n}\n\nfunction getModuleNameFromPath(sys: DevToolsSys, filePath: string) {\n  if (typeof filePath === \"string\") {\n    filePath = sys.normalize(normalizePathSlash(filePath));\n    const parts = filePath.split(\"/\");\n    const nodeModuleIndex = parts.lastIndexOf(\"node_modules\");\n    if (nodeModuleIndex > -1) {\n      const moduleParts = parts.slice(nodeModuleIndex + 1);\n      let moduleName = moduleParts[0];\n      if (moduleName) {\n        if (moduleName.startsWith(\"@\") && moduleParts[1]) {\n          moduleName += \"/\" + moduleParts[1];\n        }\n        return moduleName;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function getAppDependencies(cmps: ComponentInfo[]) {\n  const deps: AppDependency[] = [];\n  for (const cmp of cmps) {\n    if (cmp.dependencies) {\n      for (const dep of cmp.dependencies) {\n        if (!deps.some((d) => d.name === dep.name)) {\n          deps.push({ ...dep });\n        }\n      }\n    }\n  }\n  return deps.sort((a, b) => a.name.localeCompare(b.name));\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\nimport type { ExportedStatement } from \"./exported-statements\";\n\nexport function getImportedStatements(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  moduleType: ModuleFormat = \"esm\"\n) {\n  if (moduleType === \"cjs\") {\n    return getCjsImportedStatements(sys, sourceFile);\n  } else {\n    return getEsmImportedStatements(sys, sourceFile);\n  }\n}\n\n// expression to match any external import, not relative or local\nconst externalImportRegex = /^(@\\w|\\w)/;\n\nfunction getEsmImportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(s)) {\n      if (sys.ts.isLiteralExpression(s.moduleSpecifier)) {\n        if (!externalImportRegex.test(s.moduleSpecifier.text)) {\n          continue;\n        }\n        if (s.importClause?.isTypeOnly) {\n          continue;\n        }\n        if (s.importClause && s.importClause.namedBindings) {\n          if (sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            for (const n of s.importClause.namedBindings.elements) {\n              if (!n.isTypeOnly) {\n                exports.push({\n                  isDefaultExport: false,\n                  statement: s,\n                  node: n.name,\n                });\n              }\n            }\n          }\n        }\n\n        // handle default import\n        if (s.importClause && s.importClause.name) {\n          exports.push({\n            isDefaultExport: true,\n            statement: s,\n            node: s.importClause.name,\n          });\n        }\n      }\n    }\n  }\n\n  return exports;\n}\n\nfunction getCjsImportedStatements(\n  _sys: DevToolsSys,\n  _sourceFile: ts.SourceFile\n) {\n  const exports: ExportedStatement[] = [];\n\n  return exports;\n}\n", "import type ts from \"typescript\";\nimport type { AppDependency, ComponentInfo, DevToolsSys } from \"../../../types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentDisplayNameFromFilePath,\n  getComponentImportNameFilePath,\n  getDisplayFilePath,\n  isValidJsxTag,\n  getComponentImportPath,\n  shouldSkipFolder,\n} from \"../../../common/utils\";\nimport {\n  getExportedStatements,\n  type ExportedStatement,\n} from \"../../../common/ast/exported-statements\";\nimport { hasJsxNode } from \"../../../common/ast/utils\";\nimport { createTsProgram, getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\nimport { getSourceDependencies } from \"../../../common/ast/app-dependencies\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport { getImportedStatements } from \"../../../common/ast/imported-statements\";\n\nexport async function parseReactAllComponentSourceInputs(\n  sys: DevToolsSys,\n  components: ComponentInfo[]\n) {\n  const hasUnregistered = components.some((c) => !c.isRegistered);\n  if (!hasUnregistered) {\n    return components;\n  }\n\n  const tsProgram = await createTsProgram(\n    sys,\n    components.map((c) => c.filePath)\n  );\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const componentsWithTypes = await Promise.all(\n    components.map(async (cmp) => {\n      const sourceFile = tsProgram.getSourceFile(cmp.filePath);\n      if (sourceFile) {\n        const typedSrcCmps = await getReactComponentsFromSourceFile(\n          sys,\n          typeChecker,\n          cmp.filePath,\n          sourceFile,\n          false\n        );\n        const typedSrcCmp = typedSrcCmps.find((t) => t.cmpInfo.id === cmp.id);\n        if (typedSrcCmp) {\n          cmp.inputs = parseComponentSourcePropsFromNode(\n            sys,\n            typeChecker,\n            typedSrcCmp.node.fnNode\n          );\n        }\n      }\n      return cmp;\n    })\n  );\n\n  return componentsWithTypes;\n}\n\nexport async function parseReactComponentSourceInputs(\n  sys: DevToolsSys,\n  srcCmp: ReactComponentSource,\n  tsProgram: ts.Program | null,\n  includeImports: boolean\n) {\n  if (srcCmp.node.fnNode) {\n    const { sourceFile, typeChecker } = await getTypeChecker(\n      sys,\n      srcCmp.cmpInfo.filePath,\n      tsProgram\n    );\n\n    const typedSrcCmps = await getReactComponentsFromSourceFile(\n      sys,\n      typeChecker,\n      srcCmp.cmpInfo.filePath,\n      sourceFile,\n      includeImports\n    );\n    const typedSrcCmp = typedSrcCmps.find(\n      (t) => t.cmpInfo.id === srcCmp.cmpInfo.id\n    );\n    if (!typedSrcCmp) {\n      throw new Error(\n        `createComponentInputs() Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`\n      );\n    }\n\n    return parseComponentSourcePropsFromNode(\n      sys,\n      typeChecker,\n      typedSrcCmp.node.fnNode\n    );\n  }\n  return [];\n}\n\nexport async function getReactComponentsFromPath(\n  sys: DevToolsSys,\n  filePath: string,\n  includeImports: boolean\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\" || ext === \".jsx\" || ext === \".ts\" || ext === \".js\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getReactComponentsFromCode(sys, filePath, code, includeImports);\n    }\n  }\n  return null;\n}\n\nexport function getReactComponentsFromCode(\n  sys: DevToolsSys,\n  filePath: string,\n  code: string,\n  includeImports: boolean = false\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getReactComponentsFromSourceFile(\n    sys,\n    null,\n    filePath,\n    sourceFile,\n    includeImports\n  );\n}\n\nexport async function getReactComponentsFromSourceFile(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n  includeImports: boolean\n) {\n  const fileCmps: ReactComponentSource[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isStringLiteral(s.expression)\n    ) {\n      if (s.expression.text === \"use server\") {\n        // react server component files should be ignored\n        return fileCmps;\n      }\n    }\n  }\n\n  const exports = getExportedStatements(sys, sourceFile);\n  if (includeImports) {\n    exports.push(...getImportedStatements(sys, sourceFile));\n  }\n  filePath = sys.normalize(filePath);\n\n  await Promise.all(\n    exports.map(async (exp) => {\n      const sCmps = await getReactComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        exp\n      );\n      fileCmps.push(...sCmps);\n    })\n  );\n\n  return fileCmps;\n}\n\nasync function getReactComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  exp: ExportedStatement\n): Promise<ReactComponentSource[]> {\n  const srcCmps: ReactComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  if (sys.ts.isVariableStatement(exp.node)) {\n    for (const declaration of exp.node.declarationList.declarations) {\n      if (!sys.ts.isIdentifier(declaration.name)) {\n        continue;\n      }\n      if (!isValidJsxTag(declaration.name.text)) {\n        continue;\n      }\n\n      const cmpExp = getReactComponentExpression(\n        sys,\n        typeChecker,\n        declaration.initializer\n      );\n      if (cmpExp) {\n        const cmpName = cmpExp.name || declaration.name.text;\n\n        const exportName = exp.isDefaultExport ? \"default\" : cmpName;\n        const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n        srcCmps.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, exportName),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: [],\n            exportName,\n            exportType,\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath,\n            dependencies: cmpExp.deps,\n          },\n          node: cmpExp,\n        });\n      }\n    }\n    return srcCmps;\n  }\n\n  if (sys.ts.isArrowFunction(exp.node)) {\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName = getComponentDisplayNameFromFilePath(sys, filePath);\n\n      const exportName = exp.isDefaultExport ? \"default\" : cmpName;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName: getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          dependencies: cmpExp.deps,\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  if (\n    sys.ts.isFunctionExpression(exp.node) ||\n    sys.ts.isFunctionDeclaration(exp.node)\n  ) {\n    const fnName = exp.node.name?.text;\n    if (fnName && !isValidJsxTag(fnName)) {\n      return srcCmps;\n    }\n\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName =\n        cmpExp.name || getComponentDisplayNameFromFilePath(sys, filePath);\n\n      const exportName =\n        exp.isDefaultExport || !cmpExp.name ? \"default\" : cmpExp.name;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName:\n            cmpExp.name || getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          dependencies: cmpExp.deps,\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  if (\n    (sys.ts.isExportSpecifier(exp.node) || sys.ts.isIdentifier(exp.node)) &&\n    isValidJsxTag(exp.node.getText())\n  ) {\n    let modulePath;\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName =\n        cmpExp.name || getComponentDisplayNameFromFilePath(sys, filePath);\n      const exportName =\n        exp.isDefaultExport || !cmpExp.name ? \"default\" : cmpExp.name;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      const moduleSpecifier =\n        closestExportDeclaration(sys, exp.node)?.moduleSpecifier ??\n        closestImportDeclaration(sys, exp.node)?.moduleSpecifier;\n\n      if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n        const symbol = typeChecker?.getSymbolAtLocation(moduleSpecifier);\n        if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n          const declaration = symbol.declarations[0];\n          if (\n            !sys.ts.isSourceFile(declaration) ||\n            (sys.ts.isSourceFile(declaration) &&\n              declaration.fileName.includes(\"node_modules\"))\n          ) {\n            modulePath = moduleSpecifier.text;\n          }\n        }\n      }\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName, modulePath),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName:\n            cmpExp.name || getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath: modulePath ? modulePath : importPath,\n          externalImportPath: modulePath,\n          dependencies: cmpExp.deps,\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  // export * from \"@cloudscape-design/components\";\n  if (\n    sys.ts.isExportDeclaration(exp.node) &&\n    exp.node.exportClause === undefined\n  ) {\n    const moduleSpecifier = exp.node.moduleSpecifier;\n\n    if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n      const exportedComponentNames = await extractReactComponentsFromModule(\n        sys,\n        typeChecker,\n        filePath,\n        moduleSpecifier\n      );\n      srcCmps.push(...exportedComponentNames);\n    }\n    return srcCmps;\n  }\n\n  return srcCmps;\n}\n\nfunction closestExportDeclaration(\n  sys: DevToolsSys,\n  node: ts.Node\n): ts.ExportDeclaration | null {\n  while (node) {\n    if (sys.ts.isExportDeclaration(node)) {\n      return node;\n    }\n    node = node.parent;\n  }\n  return null;\n}\n\nfunction closestImportDeclaration(\n  sys: DevToolsSys,\n  node: ts.Node\n): ts.ImportDeclaration | null {\n  while (node) {\n    if (sys.ts.isImportDeclaration(node)) {\n      return node;\n    }\n    node = node.parent;\n  }\n  return null;\n}\n\nfunction getReactComponentExpression(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  x:\n    | ts.Expression\n    | ts.FunctionDeclaration\n    | ts.PropertyAccessExpression\n    | ts.ExportSpecifier\n    | ts.Identifier\n    | ts.Declaration\n    | undefined\n): ReactComponentSourceNode | null {\n  if (!x) {\n    return null;\n  }\n  if (sys.ts.isArrowFunction(x)) {\n    if (hasJsxNode(sys, x.body)) {\n      return {\n        name: \"\",\n        fnNode: x,\n        deps: getSourceDependencies(sys, typeChecker, x),\n      };\n    }\n    return null;\n  }\n\n  if (sys.ts.isFunctionExpression(x) || sys.ts.isFunctionDeclaration(x)) {\n    if (hasJsxNode(sys, x.body)) {\n      return {\n        name: x.name?.text || \"\",\n        fnNode: x,\n        deps: getSourceDependencies(sys, typeChecker, x),\n      };\n    }\n    return null;\n  }\n\n  if (sys.ts.isCallExpression(x)) {\n    const exp = x.expression;\n    if (sys.ts.isPropertyAccessExpression(exp)) {\n      const args = x.arguments;\n      if (args.length === 0) {\n        return null;\n      }\n\n      const reactIdentifier = exp.expression;\n      if (!sys.ts.isIdentifier(reactIdentifier)) {\n        return null;\n      }\n\n      if (reactIdentifier.text !== \"React\") {\n        return null;\n      }\n\n      const forwardRefIdentifier = exp.name;\n      if (!sys.ts.isIdentifier(forwardRefIdentifier)) {\n        return null;\n      }\n\n      if (forwardRefIdentifier.text !== \"forwardRef\") {\n        return null;\n      }\n\n      return getReactComponentExpression(sys, typeChecker, args[0]);\n    } else if (sys.ts.isIdentifier(exp) && exp.text === \"observer\") {\n      const args = x.arguments;\n      if (args.length === 0) {\n        return null;\n      }\n\n      return getReactComponentExpression(sys, typeChecker, args[0]);\n    }\n\n    return null;\n  }\n\n  if (!typeChecker) {\n    return null;\n  }\n\n  if (sys.ts.isPropertyAccessExpression(x)) {\n    // import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n    // const Accordion = AccordionPrimitive.Root;\n\n    const expIdentifier = x.expression;\n    const nameIdentifier = x.name;\n    if (\n      !sys.ts.isIdentifier(expIdentifier) ||\n      !sys.ts.isIdentifier(nameIdentifier)\n    ) {\n      return null;\n    }\n\n    if (!isValidJsxTag(nameIdentifier.text)) {\n      // Root\n      return null;\n    }\n\n    const type = typeChecker.getTypeAtLocation(nameIdentifier);\n    const callSignatures = type.getCallSignatures();\n    if (callSignatures.length > 0) {\n      const params = callSignatures[0].getParameters();\n      if (params.length > 0) {\n        return {\n          name: \"\",\n          fnNode: nameIdentifier,\n          deps: getSourceDependencies(sys, typeChecker, nameIdentifier),\n        };\n      }\n    }\n  }\n\n  if (sys.ts.isExportSpecifier(x)) {\n    const nameIdentifier = x.name;\n    return {\n      name: nameIdentifier.text || \"\",\n      fnNode: nameIdentifier,\n      deps: getSourceDependencies(sys, typeChecker, nameIdentifier),\n    };\n  }\n\n  if (sys.ts.isIdentifier(x)) {\n    return {\n      name: x.text || \"\",\n      fnNode: x,\n      deps: getSourceDependencies(sys, typeChecker, x),\n    };\n  }\n\n  // Handle declaration statements with 'as default'\n  if (sys.ts.isExpressionStatement(x)) {\n    const expression = x.expression;\n    if (\n      sys.ts.isAsExpression(expression) &&\n      sys.ts.isIdentifier(expression.type) &&\n      expression.type.text === \"default\"\n    ) {\n      return getReactComponentExpression(\n        sys,\n        typeChecker,\n        expression.expression\n      );\n    }\n  }\n\n  // Handle variable declarations with 'as default'\n  if (sys.ts.isVariableStatement(x)) {\n    for (const declaration of x.declarationList.declarations) {\n      if (\n        declaration.initializer &&\n        sys.ts.isAsExpression(declaration.initializer)\n      ) {\n        const asExpression = declaration.initializer;\n        if (\n          sys.ts.isIdentifier(asExpression.type) &&\n          asExpression.type.text === \"default\"\n        ) {\n          const componentExp = getReactComponentExpression(\n            sys,\n            typeChecker,\n            asExpression.expression\n          );\n          if (componentExp && sys.ts.isIdentifier(declaration.name)) {\n            return {\n              name: declaration.name.text,\n              fnNode: componentExp.fnNode,\n              deps: componentExp.deps,\n            };\n          }\n        }\n      }\n    }\n  }\n\n  return null;\n}\n\nexport async function getReactSourceComponentsFromDir(\n  sys: ReactDevToolsSys,\n  tsProgram: ts.Program\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (shouldSkipFolder(sys, SKIP_FOLDERS, sourceFile.fileName)) {\n        return;\n      }\n\n      if (\n        filePath === sys.reactConfigPath ||\n        filePath === sys.khulnasoftComponentPath\n      ) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath\n      );\n      cmps.push(...fileCmps);\n    })\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\nexport interface ReactComponentSourceNode {\n  name: string;\n  fnNode: ts.Node;\n  deps: AppDependency[] | undefined;\n}\n\nexport interface ReactComponentSource {\n  cmpInfo: ComponentInfo;\n  node: ReactComponentSourceNode;\n}\n\nconst SKIP_FOLDERS = new Set([\"node_modules\", \"dist\"]);\n\nasync function extractReactComponentsFromModule(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  moduleSpecifier: ts.StringLiteral\n): Promise<ReactComponentSource[]> {\n  const components: ReactComponentSource[] = [];\n  const modulePath = moduleSpecifier.text;\n\n  if (!typeChecker) {\n    return components;\n  }\n\n  try {\n    const moduleSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier);\n    if (!moduleSymbol) {\n      return components;\n    }\n\n    const exportedSymbols = typeChecker.getExportsOfModule(moduleSymbol);\n\n    for (const symbol of exportedSymbols) {\n      const declaration = symbol.valueDeclaration || symbol.declarations?.[0];\n      if (!declaration) continue;\n\n      const exportName = symbol.name;\n\n      if (!isValidJsxTag(exportName) && exportName !== \"default\") {\n        continue;\n      }\n\n      if (!isLikelyReactComponent(sys, typeChecker, declaration)) {\n        continue;\n      }\n\n      const cmpExp = getReactComponentExpression(sys, typeChecker, declaration);\n      if (cmpExp) {\n        const exportName = symbol.name;\n        const exportType = exportName === \"default\" ? \"default\" : \"named\";\n        const cmpName = getComponentDisplayName(exportName);\n        const importName =\n          exportName === \"default\"\n            ? getComponentImportNameFilePath(sys, filePath)\n            : exportName;\n\n        components.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, exportName, modulePath),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: cmpName,\n            inputs: [],\n            exportName,\n            exportType,\n            importName,\n            filePath,\n            relFilePath: sys.relative(sys.getAppRootDir(), filePath),\n            importPath: modulePath,\n            externalImportPath: modulePath,\n            dependencies: cmpExp.deps,\n          },\n          node: cmpExp,\n        });\n      }\n    }\n  } catch (error) {\n    console.error(`Error processing module ${modulePath}:`, error);\n  }\n\n  return components;\n}\n\nfunction isLikelyReactComponent(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  declaration: ts.Declaration\n): boolean {\n  if (\n    sys.ts.isInterfaceDeclaration(declaration) ||\n    sys.ts.isTypeAliasDeclaration(declaration)\n  ) {\n    return false;\n  }\n\n  if (sys.ts.isExportSpecifier(declaration)) {\n    const symbol = typeChecker.getSymbolAtLocation(declaration.name);\n    if (symbol) {\n      const aliasedSymbol = typeChecker.getAliasedSymbol(symbol);\n      const aliasedDeclaration = aliasedSymbol.declarations?.[0];\n      if (aliasedDeclaration) {\n        return isLikelyReactComponent(sys, typeChecker, aliasedDeclaration);\n      }\n    }\n    return false;\n  }\n\n  if (\n    sys.ts.isFunctionDeclaration(declaration) ||\n    sys.ts.isArrowFunction(declaration) ||\n    sys.ts.isFunctionExpression(declaration)\n  ) {\n    const signature = typeChecker.getSignatureFromDeclaration(declaration);\n    if (signature) {\n      const returnType = typeChecker.getReturnTypeOfSignature(signature);\n\n      const result = isJsxElement(returnType, typeChecker);\n      return result;\n    }\n  }\n\n  if (sys.ts.isClassDeclaration(declaration)) {\n    const result =\n      declaration.heritageClauses?.some((clause) =>\n        clause.types.some(\n          (type) =>\n            type.expression.getText() === \"React.Component\" ||\n            type.expression.getText() === \"Component\"\n        )\n      ) ?? false;\n    return result;\n  }\n\n  if (sys.ts.isVariableDeclaration(declaration)) {\n    const type = typeChecker.getTypeAtLocation(declaration);\n    const result = type\n      .getCallSignatures()\n      .some((sig) =>\n        isJsxElement(typeChecker.getReturnTypeOfSignature(sig), typeChecker)\n      );\n    return result;\n  }\n\n  return false;\n}\n\nfunction isJsxElement(type: ts.Type, typeChecker: ts.TypeChecker): boolean {\n  const typeString = typeChecker.typeToString(type);\n  return (\n    typeString === \"JSX.Element\" ||\n    typeString === \"Element\" ||\n    typeString.includes(\"ReactElement\") ||\n    typeString.includes(\"React.ReactElement\") ||\n    typeString.includes(\"ReactNode\")\n  );\n}\n", "import type { NextDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport {\n  getReactComponentsFromSourceFile,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { isMapperFile } from \"packages/dev-tools/common/utils\";\n\nexport async function getNextSourceComponentsFromDir(\n  sys: NextDevToolsSys,\n  tsProgram: ts.Program\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (sys.appDir && SKIP_APP_FILES.has(fileName)) {\n        return;\n      }\n      if (sys.dirname(sourceFile.fileName).includes(\"node_modules\")) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (\n        filePath === sys.nextConfigPath ||\n        filePath === sys.khulnasoftComponentPath\n      ) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath || isMapperFile(filePath)\n      );\n      cmps.push(...fileCmps);\n    })\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\n// https://nextjs.org/docs/app/api-reference/file-conventions\nconst SKIP_APP_FILES = new Set([\n  \"default.tsx\",\n  \"default.ts\",\n  \"default.jsx\",\n  \"default.js\",\n  \"error.tsx\",\n  \"error.ts\",\n  \"error.jsx\",\n  \"error.js\",\n  \"layout.tsx\",\n  \"layout.ts\",\n  \"layout.jsx\",\n  \"layout.js\",\n  \"loading.tsx\",\n  \"loading.ts\",\n  \"loading.jsx\",\n  \"loading.js\",\n  \"not-found.tsx\",\n  \"not-found.ts\",\n  \"not-found.jsx\",\n  \"not-found.js\",\n  \"page.tsx\",\n  \"page.ts\",\n  \"page.jsx\",\n  \"page.js\",\n  \"route.tsx\",\n  \"route.ts\",\n  \"route.jsx\",\n  \"route.js\",\n  \"template.tsx\",\n  \"template.ts\",\n  \"template.jsx\",\n  \"template.js\",\n]);\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\nimport { getTextOfPropertyName } from \"./convert-values\";\n\nexport function normalizeImports(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const externalImportStatements: ts.ImportDeclaration[] = [];\n  const importStatements: ts.ImportDeclaration[] = [];\n  const unknownImportStatements: ts.ImportDeclaration[] = [];\n  const statements: ts.Statement[] = [];\n\n  for (const statement of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(statement)) {\n      if (sys.ts.isStringLiteral(statement.moduleSpecifier)) {\n        const importPath = statement.moduleSpecifier.text;\n        if (!importPath.startsWith(\".\") && !importPath.startsWith(\"/\")) {\n          externalImportStatements.push(statement);\n          continue;\n        }\n      }\n\n      const importClause = statement.importClause;\n      if (importClause) {\n        const namedBindings = importClause.namedBindings;\n        if (namedBindings) {\n          importStatements.push(statement);\n          continue;\n        }\n\n        if (importClause.name) {\n          importStatements.push(statement);\n          continue;\n        }\n      }\n\n      unknownImportStatements.push(statement);\n      continue;\n    }\n\n    statements.push(statement);\n  }\n\n  return sys.ts.factory.updateSourceFile(sourceFile, [\n    ...sortImports(sys, externalImportStatements),\n    ...sortImports(sys, importStatements),\n    ...sortImports(sys, unknownImportStatements),\n    ...statements,\n  ]);\n}\n\nexport function normalizeLineBreaks(code: string) {\n  const lines = code.split(\"\\n\").map((l) => l.trimEnd());\n\n  code = \"\";\n  let foundImport = false;\n  for (let i = lines.length - 1; i >= 0; i--) {\n    let line = lines[i];\n\n    if (!foundImport && line.startsWith(\"import \")) {\n      foundImport = true;\n      line = line + \"\\n\";\n    }\n\n    if (/^khulnasoft.init(.*)$/.test(line)) {\n      line = line + \"\\n\";\n    }\n\n    if (lines[i - 1] && !lines[i - 1].includes(\"*/\")) {\n      if (line.trim().startsWith(\"Khulnasoft.registerComponent\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"/**\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"module.exports\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"export \")) {\n        line = \"\\n\" + line;\n      }\n    }\n\n    code = line + \"\\n\" + code;\n  }\n\n  return code.trim() + \"\\n\";\n}\n\nfunction sortImports(\n  sys: DevToolsSys,\n  importStatements: ts.ImportDeclaration[]\n) {\n  return importStatements.sort((a, b) => {\n    const aText = getImportName(sys, a);\n    const bText = getImportName(sys, b);\n    return aText.toLocaleLowerCase().localeCompare(bText.toLocaleLowerCase());\n  });\n}\n\nfunction getImportName(sys: DevToolsSys, s: ts.ImportDeclaration) {\n  const importClause = s.importClause;\n  if (importClause) {\n    const namedBindings = importClause.namedBindings;\n    if (namedBindings && sys.ts.isNamedImports(namedBindings)) {\n      if (namedBindings.elements.length > 0) {\n        return namedBindings.elements[0].name.text;\n      }\n    }\n    if (importClause.name) {\n      return importClause.name.text;\n    }\n  }\n  if (s.moduleSpecifier && sys.ts.isStringLiteral(s.moduleSpecifier)) {\n    return s.moduleSpecifier.text;\n  }\n  return \"\";\n}\n\nexport function ensureUseClientStringLiteral(code: string) {\n  if (\n    typeof code === \"string\" &&\n    !code.includes(`'use client'`) &&\n    !code.includes(`\"use client\"'`)\n  ) {\n    code = `\"use client\"\\n${code}`;\n  }\n  return code;\n}\n\nexport function removeUseClientStringLiteral(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const statements = sourceFile.statements.filter((s) => {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isStringLiteral(s.expression)\n    ) {\n      if (sys.ts.isStringLiteral(s.expression)) {\n        if (s.expression.text === \"use client\") {\n          return false;\n        }\n      }\n    }\n    return true;\n  });\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nexport function normalizeRegisteredArrayElements(\n  sys: DevToolsSys,\n  elements: ts.Expression[]\n) {\n  return elements.sort((a, b) => {\n    if (\n      sys.ts.isObjectLiteralExpression(a) &&\n      sys.ts.isObjectLiteralExpression(b)\n    ) {\n      const aName = getNameProperty(sys, a);\n      const bName = getNameProperty(sys, b);\n      return aName.toLocaleLowerCase().localeCompare(bName.toLocaleLowerCase());\n    }\n    return 1;\n  });\n}\n\nfunction getNameProperty(sys: DevToolsSys, obj: ts.ObjectLiteralExpression) {\n  const prop = obj.properties.find((p) => {\n    return getTextOfPropertyName(sys, p) === \"name\";\n  });\n\n  if (\n    prop &&\n    sys.ts.isPropertyAssignment(prop) &&\n    sys.ts.isStringLiteral(prop.initializer)\n  ) {\n    return prop.initializer.text;\n  }\n\n  return \"zzzz\";\n}\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { NextDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  resolveComponentPath,\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentDisplayNameFromFilePath,\n  getComponentId,\n  getComponentImportPath,\n  getDisplayFilePath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { NEXT_KHULNASOFT_API_KEY_ENV } from \"./next-api-key\";\n\nexport async function parseNextRegistryFromFile(sys: NextDevToolsSys) {\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseNextRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseNextRegistryFromCode(\n  sys: NextDevToolsSys,\n  code: string\n) {\n  const sourceFile = codeToSource(sys, code);\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return parseNextRegistryFromSourceSdkGen2(sys, sourceFile);\n  }\n  return parseNextRegistryFromSource(sys, sourceFile);\n}\n\nasync function parseNextRegistryFromSource(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const cmps: ComponentInfo[] = [];\n\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const s = sourceFile.statements[i];\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"Khulnasoft\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName !== \"registerComponent\") {\n      continue;\n    }\n    const args = exp.arguments;\n    if (args.length < 2) {\n      continue;\n    }\n    const infoArg = args[1];\n    if (!sys.ts.isObjectLiteralExpression(infoArg)) {\n      continue;\n    }\n\n    const cmpArg = args[0];\n    if (sys.ts.isCallExpression(cmpArg)) {\n      const fnName =\n        sys.ts.isIdentifier(cmpArg.expression) && cmpArg.expression.text;\n\n      if (fnName === \"withChildren\") {\n        // Khulnasoft.registerComponent( withChildren( ?? ), {...})\n\n        const wrappedCmpArg = checkWrapperFunction(sys, cmpArg.arguments[0]);\n\n        if (sys.ts.isCallExpression(wrappedCmpArg)) {\n          // Khulnasoft.registerComponent( withChildren(dynamic( .. )), {...})\n          const cmp = await parseNextRegisteredDynamicComponent(\n            sys,\n            i,\n            wrappedCmpArg,\n            infoArg,\n            true\n          );\n          if (cmp) {\n            cmps.push(cmp);\n          }\n        } else {\n          // Khulnasoft.registerComponent( withChildren(Component), {...})\n          const cmpArgArgs = wrappedCmpArg;\n          if (sys.ts.isIdentifier(cmpArgArgs)) {\n            const cmp = await parseNextRegisteredIdentifierComponent(\n              sys,\n              sourceFile,\n              i,\n              cmpArgArgs,\n              infoArg,\n              true\n            );\n            if (cmp) {\n              cmps.push(cmp);\n            }\n          }\n        }\n        continue;\n      }\n\n      if (fnName === \"dynamic\") {\n        // Khulnasoft.registerComponent(dynamic(() => import('./components/heading')), {...})\n        const cmp = await parseNextRegisteredDynamicComponent(\n          sys,\n          i,\n          cmpArg,\n          infoArg,\n          false\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      const wrappedCmpArg = checkWrapperFunction(sys, cmpArg.arguments[0]);\n\n      if (\n        sys.ts.isCallExpression(wrappedCmpArg) &&\n        sys.ts.isIdentifier(wrappedCmpArg.expression) &&\n        wrappedCmpArg.expression.text === \"dynamic\"\n      ) {\n        // Khulnasoft.registerComponent(forwardProps(dynamic(() => import('./components/heading'))), {...})\n        const cmp = await parseNextRegisteredDynamicComponent(\n          sys,\n          i,\n          wrappedCmpArg,\n          infoArg,\n          false\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      if (sys.ts.isIdentifier(wrappedCmpArg)) {\n        // Khulnasoft.registerComponent(forwardProps(Component), {...} )\n        const cmp = await parseNextRegisteredIdentifierComponent(\n          sys,\n          sourceFile,\n          i,\n          wrappedCmpArg,\n          infoArg,\n          false\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      continue;\n    }\n\n    if (sys.ts.isIdentifier(cmpArg)) {\n      // Khulnasoft.registerComponent(Component, {...} )\n      const cmp = await parseNextRegisteredIdentifierComponent(\n        sys,\n        sourceFile,\n        i,\n        cmpArg,\n        infoArg,\n        false\n      );\n      if (cmp) {\n        cmps.push(cmp);\n      }\n      continue;\n    }\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nfunction checkWrapperFunction(\n  sys: NextDevToolsSys,\n  node: ts.Expression\n): ts.Expression {\n  if (sys.ts.isCallExpression(node)) {\n    const fnName = sys.ts.isIdentifier(node.expression) && node.expression.text;\n    if (fnName === \"dynamic\") {\n      return node;\n    } else {\n      return checkWrapperFunction(sys, node.arguments[0]);\n    }\n  }\n  return node;\n}\n\nasync function parseNextRegisteredDynamicComponent(\n  sys: NextDevToolsSys,\n  statementIndex: number,\n  dynamicArg: ts.CallExpression,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n  };\n\n  const importArgArgs = dynamicArg.arguments;\n  if (importArgArgs.length === 0) {\n    return null;\n  }\n\n  const importArgArg = importArgArgs[0];\n  if (!sys.ts.isArrowFunction(importArgArg)) {\n    return null;\n  }\n\n  const importBody = importArgArg.body;\n  if (sys.ts.isCallExpression(importBody)) {\n    // probably default export\n    // dynamic(() => import('./components/heading')),\n    const importExp = importBody.expression;\n    if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n      return null;\n    }\n\n    if (importBody.arguments.length !== 1) {\n      return null;\n    }\n\n    const importPathArg = importBody.arguments[0];\n    if (!sys.ts.isStringLiteral(importPathArg)) {\n      return null;\n    }\n\n    const importPath = importPathArg.text;\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = \"default\";\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else if (sys.ts.isPropertyAccessExpression(importBody)) {\n    // probably named export\n    // dynamic(async () => (await import(\"./components/title\")).Title),\n    const paranthesizedExp = importBody.expression;\n    if (!sys.ts.isParenthesizedExpression(paranthesizedExp)) {\n      return null;\n    }\n\n    const awaitExpr = paranthesizedExp.expression;\n    if (!sys.ts.isAwaitExpression(awaitExpr)) {\n      return null;\n    }\n\n    const callExp = awaitExpr.expression;\n    if (!sys.ts.isCallExpression(callExp)) {\n      return null;\n    }\n\n    const importExp = callExp.expression;\n    if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n      return null;\n    }\n\n    if (callExp.arguments.length !== 1) {\n      return null;\n    }\n\n    const importPathArg = callExp.arguments[0];\n    if (!sys.ts.isStringLiteral(importPathArg)) {\n      return null;\n    }\n\n    if (!sys.ts.isIdentifier(importBody.name)) {\n      return null;\n    }\n\n    const importPath = importPathArg.text;\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(importBody.name.text);\n    cmp.importName = importBody.name.text;\n    cmp.exportName = importBody.name.text;\n    cmp.exportType = \"named\";\n  } else {\n    return null;\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath\n    );\n  }\n  return cmp;\n}\n\nasync function parseNextRegisteredIdentifierComponent(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  statementIndex: number,\n  identifierArg: ts.Identifier,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n  };\n\n  const importDeclarations = sourceFile.statements.filter((s) =>\n    sys.ts.isImportDeclaration(s)\n  ) as ts.ImportDeclaration[];\n\n  const defaultImportDeclaration = importDeclarations.find(\n    (s) => s.importClause && s.importClause.name?.text === identifierArg.text\n  );\n\n  if (defaultImportDeclaration) {\n    const importPath = defaultImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n    const resolvedPath = await resolveNextImportPath(sys, importPath.text);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else {\n    const namedImportDeclaration = importDeclarations.find((s) => {\n      if (!s.importClause) {\n        return false;\n      }\n      if (!s.importClause.namedBindings) {\n        return false;\n      }\n      if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n        return false;\n      }\n      return s.importClause.namedBindings.elements.some(\n        (e) => e.name.text === identifierArg.text\n      );\n    });\n    if (!namedImportDeclaration) {\n      return null;\n    }\n    const importPath = namedImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath.text);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    // If path doesn't exist, it's an external module\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(identifierArg.text);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = identifierArg.text;\n    cmp.exportType = \"named\";\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath\n    );\n  }\n  return cmp;\n}\n\nfunction resolveNextImportPath(sys: NextDevToolsSys, importPath: string) {\n  return resolveComponentPath(\n    sys,\n    sys.normalize(sys.resolve(sys.dirname(sys.registryPath), importPath))\n  );\n}\n\nexport function ensureKhulnasoftIsInitialized(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  typescriptEnabled: boolean\n) {\n  let isApiKeyInitialized = false;\n  let lastImportIndex = 0;\n\n  const statements = [...sourceFile.statements];\n\n  for (let i = 0; i < statements.length; i++) {\n    const s = statements[i];\n    if (sys.ts.isImportDeclaration(s)) {\n      lastImportIndex = i;\n      continue;\n    }\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"khulnasoft\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName == \"init\") {\n      isApiKeyInitialized = true;\n      break;\n    } else {\n      continue;\n    }\n  }\n\n  if (isApiKeyInitialized) {\n    return sourceFile;\n  }\n\n  // process.env.NEXT_PUBLIC_KHULNASOFT_API_KEY\n  const envKeyExpression = sys.ts.factory.createPropertyAccessExpression(\n    sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createIdentifier(\"process\"),\n      sys.ts.factory.createIdentifier(\"env\")\n    ),\n    sys.ts.factory.createIdentifier(NEXT_KHULNASOFT_API_KEY_ENV)\n  );\n\n  const nonNullEnvKeyExpression = typescriptEnabled\n    ? sys.ts.factory.createNonNullExpression(envKeyExpression)\n    : envKeyExpression;\n\n  const initializeKhulnasoftApiKey = sys.ts.factory.createExpressionStatement(\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"khulnasoft\"),\n        sys.ts.factory.createIdentifier(\"init\")\n      ),\n      undefined,\n      [nonNullEnvKeyExpression]\n    )\n  );\n\n  statements.splice(lastImportIndex + 1, 0, initializeKhulnasoftApiKey);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nasync function parseNextRegistryFromSourceSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const cmps: ComponentInfo[] = [];\n\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseNextRegisteredComponentSdkGen2(\n          sys,\n          sourceFile,\n          cmpElm\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      })\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseNextRegisteredComponentSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n  };\n\n  const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n\n  if (acceptsChildren) {\n    cmp.acceptsChildren = true;\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isCallExpression(initializer)) {\n        const fnName =\n          sys.ts.isIdentifier(initializer.expression) &&\n          initializer.expression.text;\n\n        if (fnName === \"dynamic\") {\n          // component: dynamic(() => import(\"./components/Counter/Counter\")),\n\n          const importArgArgs = initializer.arguments;\n          if (importArgArgs.length === 0) {\n            return null;\n          }\n\n          const importArgArg = importArgArgs[0];\n          if (!sys.ts.isArrowFunction(importArgArg)) {\n            return null;\n          }\n\n          const importBody = importArgArg.body;\n          if (sys.ts.isCallExpression(importBody)) {\n            // probably default export\n            // dynamic(() => import('./components/heading')),\n            const importExp = importBody.expression;\n            if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n              return null;\n            }\n\n            if (importBody.arguments.length !== 1) {\n              return null;\n            }\n\n            const importPathArg = importBody.arguments[0];\n            if (!sys.ts.isStringLiteral(importPathArg)) {\n              return null;\n            }\n\n            const importPath = importPathArg.text;\n\n            const resolvedPath = await resolveNextImportPath(sys, importPath);\n            cmp.filePath = resolvedPath;\n            cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n            if (await sys.exists(resolvedPath)) {\n              cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n            } else {\n              // If path doesn't exist, it's an external module\n              cmp.externalImportPath = importPath;\n              cmp.importPath = cmp.externalImportPath;\n            }\n\n            cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n            cmp.importName = \"default\";\n            cmp.exportName = \"default\";\n            cmp.exportType = \"default\";\n          } else if (sys.ts.isPropertyAccessExpression(importBody)) {\n            // probably named export\n            // dynamic(async () => (await import(\"./components/title\")).Title),\n            const paranthesizedExp = importBody.expression;\n            if (!sys.ts.isParenthesizedExpression(paranthesizedExp)) {\n              return null;\n            }\n\n            const awaitExpr = paranthesizedExp.expression;\n            if (!sys.ts.isAwaitExpression(awaitExpr)) {\n              return null;\n            }\n\n            const callExp = awaitExpr.expression;\n            if (!sys.ts.isCallExpression(callExp)) {\n              return null;\n            }\n\n            const importExp = callExp.expression;\n            if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n              return null;\n            }\n\n            if (callExp.arguments.length !== 1) {\n              return null;\n            }\n\n            const importPathArg = callExp.arguments[0];\n            if (!sys.ts.isStringLiteral(importPathArg)) {\n              return null;\n            }\n\n            if (!sys.ts.isIdentifier(importBody.name)) {\n              return null;\n            }\n\n            const importPath = importPathArg.text;\n\n            const resolvedPath = await resolveNextImportPath(sys, importPath);\n            cmp.filePath = resolvedPath;\n            cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n            if (await sys.exists(resolvedPath)) {\n              cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n            } else {\n              // If path doesn't exist, it's an external module\n              cmp.externalImportPath = importPath;\n              cmp.importPath = cmp.externalImportPath;\n            }\n\n            cmp.name = getComponentDisplayName(importBody.name.text);\n            cmp.importName = importBody.name.text;\n            cmp.exportName = importBody.name.text;\n            cmp.exportType = \"named\";\n          } else {\n            return null;\n          }\n\n          cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n          cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n          if (cmp.filePath && cmp.exportName) {\n            cmp.id = await getComponentId(\n              sys,\n              cmp.filePath,\n              cmp.exportName,\n              cmp.externalImportPath\n            );\n          }\n          return cmp;\n        }\n      }\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.importPath = getComponentImportPath(sys, i.filePath);\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const importDeclarations = sourceFile.statements.filter((s) =>\n        sys.ts.isImportDeclaration(s)\n      ) as ts.ImportDeclaration[];\n\n      const defaultImportDeclaration = importDeclarations.find(\n        (s) => s.importClause && s.importClause.name?.text === identifierName\n      );\n\n      if (defaultImportDeclaration) {\n        const importPath = defaultImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n        cmp.exportName = \"default\";\n      } else {\n        const namedImportDeclaration = importDeclarations.find((s) => {\n          if (!s.importClause) {\n            return false;\n          }\n          if (!s.importClause.namedBindings) {\n            return false;\n          }\n          if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            return false;\n          }\n          return s.importClause.namedBindings.elements.some(\n            (e) => e.name.text === identifierName\n          );\n        });\n        if (!namedImportDeclaration) {\n          return null;\n        }\n        const importPath = namedImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n\n        cmp.exportName = identifierName;\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function removeUnusedImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  let statements = [...sourceFile.statements];\n  let madeUpdates = false;\n\n  for (let i = sourceFile.statements.length - 1; i >= 0; i--) {\n    const importDec = sourceFile.statements[i];\n\n    if (sys.ts.isImportDeclaration(importDec) && importDec.importClause) {\n      let removeImportDeclaration = false;\n\n      const namedBindings = importDec.importClause.namedBindings;\n      if (\n        namedBindings &&\n        sys.ts.isNamedImports(namedBindings) &&\n        namedBindings.elements\n      ) {\n        const namedBindingsElements = [...namedBindings.elements];\n\n        for (let j = namedBindingsElements.length - 1; j >= 0; j--) {\n          const namedImportElement = namedBindingsElements[j];\n          if (sys.ts.isImportSpecifier(namedImportElement)) {\n            const importName = namedImportElement.name;\n            if (importName && sys.ts.isIdentifier(importName)) {\n              const namedImportFn = importName.text;\n              if (!isIdentifierFound(sys, sourceFile, namedImportFn)) {\n                namedBindingsElements.splice(j, 1);\n              }\n            }\n          }\n        }\n\n        if (namedBindingsElements.length === 0) {\n          removeImportDeclaration = true;\n        } else if (\n          namedBindings.elements.length !== namedBindingsElements.length\n        ) {\n          const updatedImport = sys.ts.factory.updateImportClause(\n            importDec.importClause,\n            false,\n            importDec.importClause.name,\n            sys.ts.factory.createNamedImports(namedBindingsElements)\n          );\n          const s = sys.ts.factory.updateImportDeclaration(\n            importDec,\n            undefined,\n            updatedImport,\n            importDec.moduleSpecifier,\n            undefined\n          );\n          statements[i] = s;\n          madeUpdates = true;\n        }\n      } else if (\n        importDec.importClause.name &&\n        sys.ts.isIdentifier(importDec.importClause.name)\n      ) {\n        const importName = importDec.importClause.name.text;\n        if (!isIdentifierFound(sys, sourceFile, importName)) {\n          removeImportDeclaration = true;\n        }\n      }\n\n      if (removeImportDeclaration) {\n        statements.splice(i, 1);\n        madeUpdates = true;\n      }\n    }\n  }\n\n  if (madeUpdates) {\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n  return sourceFile;\n}\n\nfunction isIdentifierFound(\n  sys: DevToolsSys,\n  node: ts.SourceFile,\n  identifier: string\n) {\n  let foundIdentifier = false;\n\n  function visit(childNode: ts.Node) {\n    if (sys.ts.isImportDeclaration(childNode)) {\n      return;\n    }\n    if (sys.ts.isIdentifier(childNode) && childNode.text === identifier) {\n      foundIdentifier = true;\n      return;\n    }\n    sys.ts.forEachChild(childNode, visit);\n  }\n\n  sys.ts.forEachChild(node, visit);\n\n  return foundIdentifier;\n}\n", "import type {\n  ComponentInfo,\n  ComponentInput,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../types\";\nimport { clone, isBoolean, isNumber, isString, sortComponents } from \"../utils\";\nimport {\n  componentAcceptsChildren,\n  normalizeComponentInput,\n} from \"./component-info\";\n\nexport function updateRegistry(\n  cmpId: string,\n  srcCmps: ComponentInfo[],\n  regCmps: ComponentInfo[],\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null\n) {\n  let addCmpToRegistry: ComponentInfo | null = null;\n  let removeCmpFromRegistry: ComponentInfo | null = null;\n  let updateRegisteredCmp: ComponentInfo | null = null;\n  let nodeIndex = -1;\n\n  srcCmps = clone(srcCmps);\n  regCmps = clone(regCmps);\n\n  const srcCmpInfo = srcCmps.find((c) => c.id === cmpId)!;\n  const regCmpInfo = regCmps.find((c) => c.id === cmpId);\n\n  if (registerCmp) {\n    // lets register this component\n    if (!regCmpInfo) {\n      // component info not already registered, append it using src info\n      addCmpToRegistry = {\n        ...clone(srcCmpInfo),\n        inputs: clone(srcCmpInfo.inputs).map((i) => {\n          i.isRegistered = true;\n          return i;\n        }),\n      };\n      nodeIndex = regCmps.length;\n      regCmps.push(addCmpToRegistry);\n    }\n  } else if (\n    typeof regCmpInfo?.nodeIndex === \"number\" &&\n    regCmpInfo.nodeIndex > -1\n  ) {\n    // component is in the registry\n    if (unregisterCmp) {\n      // already registered, unregister it\n      nodeIndex = regCmpInfo.nodeIndex;\n      removeCmpFromRegistry = clone(regCmpInfo);\n      regCmps = regCmps.filter((c) => c.id !== cmpId);\n    } else if (setCmpInfo != null) {\n      // already registered, update component info\n      updateCmpInfoValues(regCmpInfo, setCmpInfo);\n      nodeIndex = regCmpInfo.nodeIndex;\n      updateRegisteredCmp = regCmpInfo;\n    } else if (setCmpInput != null) {\n      // already registered, update component input\n      const input = regCmpInfo.inputs.find((i) => i.name === setCmpInput.name);\n      if (input) {\n        if (setCmpInput.registerInput === false) {\n          // remove input from the registered inputs\n          input.isRegistered = false;\n        } else {\n          // update the existing registered input\n          updateCmpInputValues(input, setCmpInput);\n          input.isRegistered = true;\n        }\n        updateRegisteredCmp = regCmpInfo;\n        nodeIndex = regCmpInfo.nodeIndex;\n      }\n    }\n  }\n\n  return {\n    addCmpToRegistry,\n    removeCmpFromRegistry,\n    updateRegisteredCmp,\n    nodeIndex,\n    components: mergeComponents(srcCmps, regCmps),\n  };\n}\n\nexport function mergeComponents(\n  sourceComponents: ComponentInfo[],\n  registeredCmps: ComponentInfo[]\n) {\n  const cmps = sortComponents([\n    ...registeredCmps.map((c) => {\n      c.isRegistered = true;\n      return c;\n    }),\n    ...sourceComponents\n      .filter((c) => !registeredCmps.some((r) => r.id === c.id))\n      .map((c) => {\n        c.isRegistered = false;\n        return c;\n      }),\n  ]);\n\n  cmps.forEach((cmp) => {\n    cmp.inputs = cmp.inputs.map(normalizeComponentInput);\n    cmp.inputs.sort((a, b) => {\n      return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n    });\n\n    const regCmp = registeredCmps.find((c) => c.id === cmp.id);\n    if (regCmp) {\n      // update the array of the registered component in place\n      // when updating many components in one call, we need to\n      // ensure the array stays up to date with each registered cmp\n      regCmp.acceptsChildren = componentAcceptsChildren(cmp);\n    }\n\n    // Make sure filePath and relFilePath are set correctly in case of external modules\n    const externalCmp = sourceComponents.find(\n      (c) => c.id === cmp.id && c.externalImportPath\n    );\n    if (externalCmp) {\n      cmp.filePath = externalCmp.filePath;\n      cmp.relFilePath = externalCmp.relFilePath;\n    }\n  });\n\n  return cmps;\n}\n\nfunction updateCmpInfoValues(\n  cmpInfo: ComponentInfo,\n  setCmpInfo: SetComponentInfoOptions\n) {\n  if (isString(setCmpInfo.name)) {\n    cmpInfo.name = setCmpInfo.name;\n  } else if (setCmpInfo.name === null) {\n    cmpInfo.name = cmpInfo.importName;\n  }\n\n  if (isString(setCmpInfo.description)) {\n    cmpInfo.description = setCmpInfo.description;\n  } else if (setCmpInfo.description === null) {\n    delete cmpInfo.description;\n  }\n\n  if (isString(setCmpInfo.image)) {\n    cmpInfo.image = setCmpInfo.image;\n  } else if (setCmpInfo.image === null) {\n    delete cmpInfo.image;\n  }\n}\n\nfunction updateCmpInputValues(\n  cmpInput: ComponentInput,\n  setCmpInput: SetComponentInputOptions\n) {\n  if (isString(setCmpInput.type)) {\n    cmpInput.type = setCmpInput.type;\n  }\n\n  if (isString(setCmpInput.friendlyName)) {\n    cmpInput.friendlyName = setCmpInput.friendlyName;\n  } else if (setCmpInput.friendlyName === null) {\n    delete cmpInput.friendlyName;\n  }\n\n  if (\n    isString(setCmpInput.defaultValue) ||\n    isNumber(setCmpInput.defaultValue) ||\n    isBoolean(setCmpInput.defaultValue)\n  ) {\n    cmpInput.defaultValue = setCmpInput.defaultValue;\n  } else if (setCmpInput.defaultValue === null) {\n    delete cmpInput.defaultValue;\n  }\n\n  if (isString(setCmpInput.helperText)) {\n    cmpInput.helperText = setCmpInput.helperText;\n  } else if (setCmpInput.helperText === null) {\n    delete cmpInput.helperText;\n  }\n\n  if (setCmpInput.required === true) {\n    cmpInput.required = setCmpInput.required;\n  } else if (setCmpInput.required === null || setCmpInput.required === false) {\n    delete cmpInput.required;\n  }\n}\n", "import type { DevToolsSys } from \"../../index\";\nimport { createTsProgram } from \"../../../common/typescript\";\n\nexport async function createReactTsProgram(sys: DevToolsSys) {\n  const entryPaths = new Set<string>();\n\n  const recursive = async (childDir: string) => {\n    const itemNames = await sys.readdir(childDir);\n\n    await Promise.all(\n      itemNames.map(async (itemName) => {\n        if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n          return;\n        }\n\n        const itemPath = sys.join(childDir, itemName);\n        const ext = sys.extname(itemName).toLowerCase();\n        if (\n          ext === \".tsx\" ||\n          ext === \".jsx\" ||\n          ext === \".ts\" ||\n          ext === \".js\"\n        ) {\n          entryPaths.add(itemPath);\n          return;\n        }\n\n        const stat = await sys.stat(itemPath);\n        if (stat.isDirectory()) {\n          await recursive(itemPath);\n        }\n      })\n    );\n  };\n\n  await recursive(sys.getAppRootDir());\n\n  const tsProgram = await createTsProgram(sys, [...entryPaths]);\n  return tsProgram;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\nimport { findVariableStatement } from \"./utils\";\n\nexport function ensureArrayStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureArrayStatementOptions\n) {\n  const variableStatement = findVariableStatement(\n    sys,\n    sourceFile,\n    opts.variableName\n  );\n  if (variableStatement) {\n    return sourceFile;\n  }\n  return appendArrayStatement(sys, sourceFile, opts);\n}\n\nfunction appendArrayStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureArrayStatementOptions\n) {\n  const arrayType =\n    typeof opts.arrayType === \"string\"\n      ? sys.ts.factory.createArrayTypeNode(\n          sys.ts.factory.createTypeReferenceNode(opts.arrayType, undefined)\n        )\n      : undefined;\n\n  const initializer = sys.ts.factory.createArrayLiteralExpression([]);\n\n  const variableDeclaration = sys.ts.factory.createVariableDeclaration(\n    opts.variableName,\n    undefined,\n    arrayType,\n    initializer\n  );\n\n  const variableDeclarationList = sys.ts.factory.createVariableDeclarationList(\n    [variableDeclaration],\n    sys.ts.NodeFlags.Const\n  );\n\n  const exportModifier = sys.ts.factory.createModifier(\n    sys.ts.SyntaxKind.ExportKeyword\n  );\n\n  const variableStatement = sys.ts.factory.createVariableStatement(\n    [exportModifier],\n    variableDeclarationList\n  );\n\n  const statements = [...sourceFile.statements, variableStatement];\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nexport interface EnsureArrayStatementOptions {\n  variableName: string;\n  arrayType?: string;\n}\n", "import {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n  type UpdateRegistry,\n} from \"../../../types\";\nimport type { NextDevToolsSys } from \"./index\";\nimport {\n  createNextRegisteredComponent,\n  updateNextRegisteredComponent,\n} from \"./next-component-info\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getNextSourceComponentsFromDir } from \"./next-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  ensureUseClientStringLiteral,\n  normalizeImports,\n  normalizeLineBreaks,\n  removeUseClientStringLiteral,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseNextRegistryFromFile,\n  ensureKhulnasoftIsInitialized,\n  parseNextRegisteredComponentSdkGen2,\n} from \"./next-registry-parse\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getNextApiKey } from \"./next-api-key\";\nimport type ts from \"typescript\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { hasTsconfig } from \"../../../common/fs\";\n\nexport async function nextComponentRegistry(\n  sys: NextDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, typescriptEnabled, nextApiKey] =\n    await Promise.all([\n      getNextSourceComponentsFromDir(sys, tsProgram),\n      parseNextRegistryFromFile(sys),\n      hasTsconfig(sys),\n      getNextApiKey(sys),\n    ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: nextApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n    ? [cmpId]\n    : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath))\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath)\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update: UpdateRegistry = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput\n      );\n\n      if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n        const {\n          elements,\n          elmIndex,\n          statementIndex,\n          statement,\n          variableDeclaration,\n        } = await getNextRegisteredComponentSourceSdkGen2(\n          sys,\n          sourceFile,\n          srcCmp\n        );\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          elements.push(\n            createNextRegisteredComponentSdkGen2(sys, update.addCmpToRegistry)\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          elements.splice(elmIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          const element = updateComponentObjLiteralInfoProperties(\n            sys,\n            elements[elmIndex],\n            update.updateRegisteredCmp\n          );\n          elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n            element,\n            [\n              createNextComponentPropertyAssignmentSdkGen2(\n                sys,\n                update.updateRegisteredCmp\n              ),\n              ...element.properties.slice(1),\n            ]\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          const statements = [...sourceFile.statements];\n          statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n            statement,\n            statement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              statement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  variableDeclaration,\n                  variableDeclaration.name,\n                  variableDeclaration.exclamationToken,\n                  variableDeclaration.type,\n                  sys.ts.factory.createArrayLiteralExpression(\n                    normalizeRegisteredArrayElements(sys, elements)\n                  )\n                ),\n              ]\n            )\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureNextComponentImportStatements(\n            sys,\n            update,\n            sourceFile\n          );\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"RegisteredComponent\"],\n            importPath: \"@khulnasoft.com/sdk-react\",\n            isTypeOnly: true,\n          });\n\n          sourceFile = ensureArrayStatement(sys, sourceFile, {\n            variableName: \"CUSTOM_COMPONENTS\",\n            arrayType: \"RegisteredComponent\",\n          });\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered\n          );\n        }\n      } else {\n        let statements = [...sourceFile.statements];\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          statements.push(\n            createNextRegisteredComponent(sys, update.addCmpToRegistry)\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          statements.splice(update.nodeIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          statements[update.nodeIndex] = updateNextRegisteredComponent(\n            sys,\n            statements[update.nodeIndex],\n            update.updateRegisteredCmp\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"Khulnasoft\", \"khulnasoft\"],\n            importPath: \"@khulnasoft.com/react\",\n          });\n\n          sourceFile = ensureKhulnasoftIsInitialized(\n            sys,\n            sourceFile,\n            typescriptEnabled\n          );\n\n          sourceFile = ensureNextComponentImportStatements(\n            sys,\n            update,\n            sourceFile\n          );\n\n          if (cmpInfo?.acceptsChildren) {\n            sourceFile = ensureImport(sys, sourceFile, {\n              namedImports: [\"withChildren\"],\n              importPath: \"@khulnasoft.com/react\",\n            });\n          }\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered\n          );\n        }\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    if (sys.appDir) {\n      sourceFile = removeUseClientStringLiteral(sys, sourceFile);\n    }\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    if (sys.appDir) {\n      code = ensureUseClientStringLiteral(code);\n    }\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createNextComponentPropertyAssignmentSdkGen2(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  // app dir\n  if (sys.appDir) {\n    return sys.ts.factory.createPropertyAssignment(\"component\", identifier);\n  }\n\n  // not app dir\n  // use dynamic imports\n  return sys.ts.factory.createPropertyAssignment(\n    \"component\",\n    getDynamicComponentImport(sys, cmpInfo)\n  );\n}\n\nfunction createNextAcceptChildrenPropertyAssignmentSdkGen2(\n  sys: NextDevToolsSys\n) {\n  return sys.ts.factory.createPropertyAssignment(\n    \"canHaveChildren\",\n    sys.ts.factory.createTrue()\n  );\n}\n\nfunction createNextRegisteredComponentSdkGen2(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        createNextComponentPropertyAssignmentSdkGen2(sys, cmpInfo),\n        ...(cmpInfo.acceptsChildren\n          ? [createNextAcceptChildrenPropertyAssignmentSdkGen2(sys)]\n          : []),\n      ],\n      true\n    ),\n    cmpInfo\n  );\n}\n\nasync function getNextRegisteredComponentSourceSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Khulnasoft registry must be \"CUSTOM_COMPONENTS\". Please update your Khulnasoft registry file: ${sys.registryPath}`\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseNextRegisteredComponentSdkGen2(\n      sys,\n      sourceFile,\n      elements[i]\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nfunction ensureNextComponentImportStatements(\n  sys: NextDevToolsSys,\n  update: UpdateRegistry,\n  sourceFile: ts.SourceFile\n) {\n  if (sys.appDir) {\n    // app dir\n    const regCmp = update.addCmpToRegistry || update.updateRegisteredCmp;\n    if (regCmp) {\n      const importPath = regCmp.externalImportPath\n        ? regCmp.externalImportPath\n        : getImportPath(sys, sys.registryPath, regCmp.filePath);\n      if (regCmp.exportType === \"default\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: regCmp.importName,\n          importPath,\n        });\n      } else if (regCmp.exportType === \"named\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [regCmp.importName],\n          importPath,\n        });\n      }\n    }\n  } else {\n    // not app dir\n    sourceFile = ensureImport(sys, sourceFile, {\n      defaultImport: \"dynamic\",\n      importPath: \"next/dynamic\",\n    });\n  }\n\n  return sourceFile;\n}\n\nfunction getDynamicComponentImport(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  const importPath = cmpInfo.externalImportPath\n    ? cmpInfo.externalImportPath\n    : getImportPath(sys, sys.registryPath, cmpInfo.filePath);\n\n  const useArrowFunction = cmpInfo.exportName !== \"default\";\n  let arrowFunctionBody;\n\n  if (useArrowFunction) {\n    arrowFunctionBody = sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createAwaitExpression(\n        sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(\"import\"),\n          undefined,\n          [sys.ts.factory.createStringLiteral(importPath)]\n        )\n      ),\n      sys.ts.factory.createIdentifier(cmpInfo.exportName)\n    );\n  } else {\n    arrowFunctionBody = sys.ts.factory.createCallExpression(\n      sys.ts.factory.createIdentifier(\"import\"),\n      undefined,\n      [sys.ts.factory.createStringLiteral(importPath)]\n    );\n  }\n\n  const arrowFunction = sys.ts.factory.createArrowFunction(\n    useArrowFunction\n      ? [sys.ts.factory.createModifier(sys.ts.SyntaxKind.AsyncKeyword)]\n      : undefined,\n    undefined,\n    [],\n    undefined,\n    sys.ts.factory.createToken(sys.ts.SyntaxKind.EqualsGreaterThanToken),\n    arrowFunctionBody\n  );\n\n  return sys.ts.factory.createCallExpression(\n    sys.ts.factory.createIdentifier(\"dynamic\"),\n    undefined,\n    [arrowFunction]\n  );\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { NextDevToolsSys } from \".\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { NEXT_KHULNASOFT_API_KEY_ENV } from \"./next-api-key\";\nimport { nextComponentRegistry } from \"./next-registry\";\n\n// https://www.khulnasoft.com/c/docs/quickstart\n\nexport async function nextEnsureKhulnasoftSetup(sys: NextDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await nextEnsureCounterComponent(sys, modifiedFiles);\n  await nextEnsureKhulnasoftRegistry(sys, modifiedFiles, counterCmpPath);\n\n  if (sys.appDir) {\n    sys.debug(`ensure khulnasoft setup for next.js app ${sys.appDir}`);\n    await nextAppEnsureKhulnasoftSetup(sys, sys.appDir, modifiedFiles);\n  } else if (sys.pagesDir) {\n    sys.debug(`ensure khulnasoft setup for next.js pages ${sys.pagesDir}`);\n    await nextPagesEnsureKhulnasoftSetup(sys, sys.pagesDir, modifiedFiles);\n  }\n\n  return modifiedFiles;\n}\n\nexport async function nextEnsureFigmaImportPageSetup(sys: NextDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  await nextEnsureKhulnasoftRegistry(sys, modifiedFiles);\n\n  if (sys.appDir) {\n    sys.debug(`ensure figma-imports setup for next.js app ${sys.appDir}`);\n    await nextAppEnsureFigmaImportSetup(sys, sys.appDir, modifiedFiles);\n  } else if (sys.pagesDir) {\n    sys.debug(`ensure figma-imports setup for next.js pages ${sys.pagesDir}`);\n    await nextPagesEnsureFigmaImportSetup(sys, sys.pagesDir, modifiedFiles);\n  }\n\n  return modifiedFiles;\n}\n\nasync function nextAppEnsureFigmaImportSetup(\n  sys: NextDevToolsSys,\n  appDir: string,\n  modifiedFiles: ModifiedFile[]\n) {\n  const routeFileName = `page.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(appDir, `figma-imports`, routeFileName);\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextAppRoute({ sys, routePath, modelName: \"figma-imports\" })\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(sys.khulnasoftComponentPath))) {\n    const code = await sys.formatCode(\n      sys.khulnasoftComponentPath,\n      getNextAppKhulnasoftComponent(sys)\n    );\n    await sys.writeFile(sys.khulnasoftComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.khulnasoftComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nasync function nextAppEnsureKhulnasoftSetup(\n  sys: NextDevToolsSys,\n  appDir: string,\n  modifiedFiles: ModifiedFile[]\n) {\n  const routeFileName = `page.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(appDir, `[...page]`, routeFileName);\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextAppRoute({ sys, routePath, modelName: \"page\" })\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(sys.khulnasoftComponentPath))) {\n    const code = await sys.formatCode(\n      sys.khulnasoftComponentPath,\n      getNextAppKhulnasoftComponent(sys)\n    );\n    await sys.writeFile(sys.khulnasoftComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.khulnasoftComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nfunction getNextAppKhulnasoftComponent(sys: NextDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n  \"use client\";\n  import { ${\n    ts ? \"KhulnasoftContent, \" : \"\"\n  } isPreviewing, Content } from \"@khulnasoft.com/sdk-react\";\n  import DefaultErrorPage from \"next/error\";\n  import { CUSTOM_COMPONENTS } from ${JSON.stringify(\n    getImportPath(sys, sys.khulnasoftComponentPath, sys.registryPath)\n  )};\n  ${\n    ts\n      ? `\\ninterface KhulnasoftPageProps {\n      content: KhulnasoftContent | null;\n      model: string;\n      }`\n      : \"\"\n  }\n\n  // Khulnasoft Public API Key set in .env file\n  const khulnasoftApiKey = process.env.${NEXT_KHULNASOFT_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n  export function RenderKhulnasoftContent({ content, model }${\n    ts ? \": KhulnasoftPageProps\" : \"\"\n  }) {\n    // Call the isPreviewing hook to determine if\n    // the page is being previewed in Khulnasoft\n    // If \"content\" has a value or the page is being previewed in Khulnasoft,\n    // render the KhulnasoftComponent with the specified content and model props.\n    if (content || isPreviewing()) {\n      return <Content\n        content={content}\n        apiKey={khulnasoftApiKey}\n        model={model}\n        customComponents={CUSTOM_COMPONENTS}\n      />;\n    }\n    // If the \"content\" is falsy and the page is\n    // not being previewed in Khulnasoft, render the\n    // DefaultErrorPage with a 404.\n    return <DefaultErrorPage statusCode={404} />;\n  }\n  `.trimStart();\n  }\n\n  return `\n\"use client\";\n${ts ? 'import { ComponentProps } from \"react\";' : \"\"}\nimport { KhulnasoftComponent, useIsPreviewing } from \"@khulnasoft.com/react\";\nimport { ${ts ? \"KhulnasoftContent, \" : \"\"}khulnasoft } from '@khulnasoft.com/sdk';\nimport DefaultErrorPage from \"next/error\";\nimport ${JSON.stringify(\n    getImportPath(sys, sys.khulnasoftComponentPath, sys.registryPath)\n  )};\n${\n  ts ? `\\ntype KhulnasoftPageProps = ComponentProps<typeof KhulnasoftComponent>;` : \"\"\n}\n\n// Khulnasoft Public API Key set in .env file\nkhulnasoft.init(process.env.${NEXT_KHULNASOFT_API_KEY_ENV}${ts ? \"!\" : \"\"});\n\nexport function RenderKhulnasoftContent({ content, model }${\n    ts ? \": KhulnasoftPageProps\" : \"\"\n  }) {\n  // Call the useIsPreviewing hook to determine if\n  // the page is being previewed in Khulnasoft\n  const isPreviewing = useIsPreviewing();\n  // If \"content\" has a value or the page is being previewed in Khulnasoft,\n  // render the KhulnasoftComponent with the specified content and model props.\n  if (content || isPreviewing) {\n    return <KhulnasoftComponent content={content} model={model} />;\n  }\n  // If the \"content\" is falsy and the page is\n  // not being previewed in Khulnasoft, render the\n  // DefaultErrorPage with a 404.\n  return <DefaultErrorPage statusCode={404} />;\n}\n`.trimStart();\n}\n\nfunction generatePagePropsType(sys: NextDevToolsSys) {\n  if (sys.features.asyncParams) {\n    return `\\ninterface PageProps {\n      params: Promise<{\n        page: string[];\n      }>;\n    }`;\n  } else {\n    return `\\ninterface PageProps {\n      params: {\n        page: string[];\n      };\n    }`;\n  }\n}\n\nfunction getNextAppRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: NextDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n  const buildContentImport = getImportPath(\n    sys,\n    routePath,\n    sys.khulnasoftComponentPath\n  );\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\nimport { fetchOneEntry } from \"@khulnasoft.com/sdk-react\";\nimport { RenderKhulnasoftContent } from ${JSON.stringify(buildContentImport)};\n\n// Khulnasoft Public API Key set in .env file\nconst PUBLIC_API_KEY = process.env.${NEXT_KHULNASOFT_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n${ts ? generatePagePropsType(sys) : \"\"}\n\nexport default async function Page(props${ts ? `: PageProps` : ``}) {\n  const khulnasoftModelName = \"${modelName}\";\n\n  // Use the page path specified in the URL to fetch the content\n  const urlPath = \"/\" + (${\n    sys.features.asyncParams ? \"(await props?.params)\" : \"props?.params\"\n  }?.page?.join(\"/\") || \"\");\n\n  const content = await fetchOneEntry({\n   // Get the page content from Khulnasoft with the specified options\n    apiKey: PUBLIC_API_KEY,\n    model: khulnasoftModelName,\n    userAttributes: { urlPath },\n  });\n\n  return (\n    <>\n      {/* Render the Khulnasoft page */}\n      <RenderKhulnasoftContent content={content} model={khulnasoftModelName} />\n    </>\n  );\n}\n`.trimStart();\n  }\n\n  return `\nimport { khulnasoft } from \"@khulnasoft.com/sdk\";\nimport { RenderKhulnasoftContent } from ${JSON.stringify(buildContentImport)};\n\n// Khulnasoft Public API Key set in .env file\nkhulnasoft.init(process.env.${NEXT_KHULNASOFT_API_KEY_ENV}${ts ? \"!\" : \"\"});\n${ts ? generatePagePropsType(sys) : \"\"}\n\nexport default async function Page(props${ts ? `: PageProps` : ``}) {\n  const khulnasoftModelName = \"${modelName}\";\n\n  const content = await khulnasoft\n    // Get the page content from Khulnasoft with the specified options\n    .get(khulnasoftModelName, {\n      userAttributes: {\n        // Use the page path specified in the URL to fetch the content\n        urlPath: \"/\" + (${\n          sys.features.asyncParams ? \"(await props?.params)\" : \"props?.params\"\n        }?.page?.join(\"/\") || \"\"),\n      },\n    })\n    // Convert the result to a promise\n    .toPromise();\n\n  return (\n    <>\n      {/* Render the Khulnasoft page */}\n      <RenderKhulnasoftContent content={content} model={khulnasoftModelName} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function nextPagesEnsureKhulnasoftSetup(\n  sys: NextDevToolsSys,\n  pagesDir: string,\n  modifiedFiles: ModifiedFile[]\n) {\n  const routeFileName = `[...page].${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(pagesDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextPagesRoute({ sys, routePath, modelName: \"page\" })\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nasync function nextPagesEnsureFigmaImportSetup(\n  sys: NextDevToolsSys,\n  pagesDir: string,\n  modifiedFiles: ModifiedFile[]\n) {\n  const routeFileName = `figma-imports.${\n    sys.typescriptEnabled ? \"tsx\" : \"jsx\"\n  }`;\n  const routePath = sys.join(pagesDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextPagesRoute({ sys, routePath, modelName: \"figma-imports\" })\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nfunction getNextPagesRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: NextDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\nimport React from \"react\";\nimport { useRouter } from \"next/router\";\n${ts ? 'import type { KhulnasoftContent } from \"@khulnasoft.com/sdk-react\";' : \"\"}\nimport {\n  Content,\n  fetchEntries,\n  fetchOneEntry,\n  isPreviewing,\n} from \"@khulnasoft.com/sdk-react\";\nimport DefaultErrorPage from \"next/error\";\nimport Head from \"next/head\";\n${ts ? 'import { GetStaticProps } from \"next\";' : \"\"}\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(\n      getImportPath(sys, sys.khulnasoftComponentPath, sys.registryPath)\n    )};\n\nconst KHULNASOFT_API_KEY = process.env.${NEXT_KHULNASOFT_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n// Define a function that fetches the Khulnasoft\n// content for a given page\nexport const getStaticProps${\n      ts ? \": GetStaticProps\" : \"\"\n    } = async ({ params }) => {\n  ${sys.features.asyncParams ? \"await params;\" : \"\"}\n  const urlPath =\n    \"/\" +\n    (Array.isArray(params?.page) ? params.page.join(\"/\") : params?.page || \"\");\n\n  // Fetch the khulnasoft content for the given page\n  const page = await fetchOneEntry({\n    apiKey: KHULNASOFT_API_KEY,\n    model: \"${modelName}\",\n    userAttributes: { urlPath },\n  });\n\n  return {\n    // Return the page content as props\n    props: { page },\n    // Revalidate the content every 5 seconds\n    revalidate: 5,\n  };\n};\n\n${\n  modelName === \"page\"\n    ? `\n// Define a function that generates the\n// static paths for all pages in Khulnasoft\nexport async function getStaticPaths() {\n  // Get a list of all pages in Khulnasoft\n  const pages = await fetchEntries({\n    apiKey: KHULNASOFT_API_KEY,\n    model: \"page\",\n    // We only need the URL field\n    fields: \"data.url\",\n    options: { noTargeting: true },\n  });\n  // Generate the static paths for all pages in Khulnasoft\n  return {\n    paths: pages.map((page) => \\`\\${page.data?.url}\\`),\n    fallback: \"blocking\",\n  };\n}\n`\n    : \"\"\n}\n\n// Define the Page component\nexport default function Page(props${\n      ts ? \": { page: KhulnasoftContent | null }\" : \"\"\n    }) {\n  const router = useRouter();\n  const canShowContent = props.page || isPreviewing(router.asPath);\n\n  // If the page content is not available\n  // and not in preview/editing mode, show a 404 error page\n  if (!canShowContent) {\n    return <DefaultErrorPage statusCode={404} />;\n  }\n\n  // If the page content is available, render\n  // the KhulnasoftComponent with the page content\n  return (\n    <>\n      <Head>\n        <title>{props.page?.data?.title}</title>\n      </Head>\n      {/* Render the Khulnasoft page */}\n      <Content\n        model=\"${modelName}\"\n        content={props.page}\n        apiKey={KHULNASOFT_API_KEY}\n        customComponents={CUSTOM_COMPONENTS}\n      />\n    </>\n  );\n}\n\n    `;\n  }\n\n  return `\nimport React from \"react\";\nimport { useRouter } from \"next/router\";\nimport { KhulnasoftComponent, khulnasoft, useIsPreviewing } from \"@khulnasoft.com/react\";\nimport DefaultErrorPage from \"next/error\";\nimport Head from \"next/head\";${\n    ts ? '\\nimport { KhulnasoftContent } from \"@khulnasoft.com/sdk\";' : \"\"\n  }${ts ? '\\nimport { GetStaticProps } from \"next\";' : \"\"}\nimport ${JSON.stringify(getImportPath(sys, routePath, sys.registryPath))};\n\nkhulnasoft.init(process.env.${NEXT_KHULNASOFT_API_KEY_ENV}${ts ? \"!\" : \"\"});\n\n// Define a function that fetches the Khulnasoft\n// content for a given page\nexport const getStaticProps${\n    ts ? \": GetStaticProps\" : \"\"\n  } = async ({ params }) => {\n  ${sys.features.asyncParams ? \"await params;\" : \"\"}\n  // Fetch the khulnasoft content for the given page\n  const page = await khulnasoft\n    .get(\"${modelName}\", {\n      userAttributes: {\n        urlPath: \"/\" + ((params?.page${\n          ts ? ` as string[]` : ``\n        })?.join(\"/\") || \"\"),\n      },\n    })\n    .toPromise();\n\n  // Return the page content as props\n  return {\n    props: {\n      page: page || null,\n    },\n    // Revalidate the content every 5 seconds\n    revalidate: 5,\n  };\n};\n\n${\n  modelName === \"page\"\n    ? `// Define a function that generates the\n// static paths for all pages in Khulnasoft\nexport async function getStaticPaths() {\n  // Get a list of all pages in Khulnasoft\n  const pages = await khulnasoft.getAll(\"page\", {\n    // We only need the URL field\n    fields: \"data.url\",\n    options: { noTargeting: true },\n  });\n\n  // Generate the static paths for all pages in Khulnasoft\n  return {\n    paths: pages.map((page) => String(page.data?.url)).filter(url => url !== '/'),\n    fallback: 'blocking',\n  };\n}`\n    : ``\n}\n\n// Define the Page component\nexport default function Page({ page }${\n    ts ? \": { page: KhulnasoftContent | null }\" : \"\"\n  }) {\n  const router = useRouter();\n  const isPreviewing = useIsPreviewing();\n\n  // If the page content is not available\n  // and not in preview mode, show a 404 error page\n  if (!page && !isPreviewing) {\n    return <DefaultErrorPage statusCode={404} />;\n  }\n\n  // If the page content is available, render\n  // the KhulnasoftComponent with the page content\n  return (\n    <>\n      <Head>\n        <title>{page?.data?.title}</title>\n      </Head>\n      {/* Render the Khulnasoft page */}\n      <KhulnasoftComponent model=\"${modelName}\" content={page || undefined} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function nextEnsureCounterComponent(\n  sys: NextDevToolsSys,\n  modifiedFiles: ModifiedFile[]\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  if (!(await sys.exists(counterCmpPath))) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(counterStylesPath))) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: NextDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\n\"use client\"\nimport React, { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nasync function nextEnsureKhulnasoftRegistry(\n  sys: NextDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n  counterCmpPath?: string\n) {\n  if (!(await sys.exists(sys.registryPath))) {\n    if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n      const code = getNextKhulnasoftRegistryReactGen2(sys);\n      await sys.writeFile(sys.registryPath, code);\n      // else it is gen1\n    } else {\n      await sys.writeFile(sys.registryPath, \"\");\n    }\n\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!counterCmpPath) {\n    return;\n  }\n\n  const registry = await nextComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  // Register the counter component\n  await nextComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false\n  );\n}\n\nfunction getNextKhulnasoftRegistryReactGen2(sys: NextDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@khulnasoft.com/sdk-react\";\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import { SDK_VERSIONS, type DevToolsSys } from \"../../../types\";\nimport { findPackageJson } from \"../../../common/fs\";\n\nexport async function detectReactSdkVersion(sys: DevToolsSys) {\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (pkgJson && typeof pkgJson === \"object\") {\n    const depNames = new Set(\n      Object.keys({\n        ...pkgJson.dependencies,\n        ...pkgJson.devDependencies,\n      })\n    );\n\n    if (depNames.has(\"@khulnasoft.com/sdk-react\")) {\n      return SDK_VERSIONS.gen2;\n    }\n    if (depNames.has(\"@khulnasoft.com/react\")) {\n      return SDK_VERSIONS.gen1;\n    }\n  }\n\n  return null;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getKhulnasoftCache, setKhulnasoftCache } from \"../../../common/cache\";\nimport { getNextApiKey, setNextApiKey } from \"./next-api-key\";\nimport { nextComponentRegistry } from \"./next-registry\";\nimport {\n  nextEnsureKhulnasoftSetup,\n  nextEnsureFigmaImportPageSetup,\n} from \"./next-ensure-khulnasoft-setup\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"../react/react-khulnasoft-sdk-setup\";\nimport { findKhulnasoftRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createNextDevTools(sys: CreateDevToolsOptions) {\n  const nextSys = await createNextDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    khulnasoftPageOptions: async () => {\n      return {\n        templateContentId: \"3de2f13211234071a4b19a17b4fbc5a7\",\n        pathname: \"/khulnasoft-demo\",\n        title: \"Khulnasoft + Next.js Demo Page\",\n      };\n    },\n    ensureKhulnasoftSetup: () => {\n      return nextEnsureKhulnasoftSetup(nextSys);\n    },\n    ensureFigmaImportPage: () => {\n      return nextEnsureFigmaImportPageSetup(nextSys);\n    },\n\n    getRegistryPath: () => {\n      return nextSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      nextSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false\n      );\n    },\n    unregisterComponent: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    getPublicApiKey: () => {\n      return getNextApiKey(nextSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setNextApiKey(nextSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@khulnasoft.com/dev-tools\" },\n          { name: \"@khulnasoft.com/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@khulnasoft.com/dev-tools\" },\n        { name: \"@khulnasoft.com/react\" },\n        { name: \"@khulnasoft.com/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getKhulnasoftCache(nextSys),\n    setCache: (cache) => setKhulnasoftCache(nextSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createNextDevToolsSys(sys: DevToolsSys) {\n  // https://nextjs.org/docs/pages/building-your-application/configuring/src-directory\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const nextConfigPath = await getNextConfigPath(sys);\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const nextFramework = sys.getFrameworks().find((f) => f.name === \"next\");\n  const features = {\n    asyncParams:\n      nextFramework?.version?.major !== undefined &&\n      nextFramework.version.major >= 15,\n  };\n\n  const externalPackages: Record<string, string> = {};\n  const nextSys: NextDevToolsSys = {\n    ...sys,\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[\n        sys.join(rootDir, pkgName, \"index.ts\")\n      ] = `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1)\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1)\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    appDir: null,\n    pagesDir: null,\n    srcDir: null,\n    khulnasoftComponentPath: \"\",\n    componentsDir: \"\",\n    registryPath: \"\",\n    nextConfigPath,\n    typescriptEnabled,\n    features,\n  };\n\n  if (sys.sdkVersion) {\n    nextSys.sdkVersion = sys.sdkVersion;\n  } else {\n    nextSys.sdkVersion = await detectReactSdkVersion(nextSys);\n  }\n\n  if (await sys.exists(srcDir)) {\n    // src dir\n    nextSys.srcDir = srcDir;\n    nextSys.componentsDir = sys.join(srcDir, \"components\");\n\n    const srcAppDir = sys.join(srcDir, \"app\");\n    if (await sys.exists(srcAppDir)) {\n      nextSys.appDir = srcAppDir;\n    }\n\n    const srcPagesDir = sys.join(srcDir, \"pages\");\n    if (await sys.exists(srcPagesDir)) {\n      nextSys.pagesDir = srcPagesDir;\n    }\n\n    nextSys.registryPath = await findKhulnasoftRegistry(sys, srcDir);\n  } else {\n    // no src dir\n    nextSys.componentsDir = sys.join(rootDir, \"components\");\n    nextSys.registryPath = await findKhulnasoftRegistry(sys, rootDir);\n  }\n\n  nextSys.khulnasoftComponentPath = sys.join(\n    nextSys.componentsDir,\n    `khulnasoft.${typescriptEnabled ? \"tsx\" : \"jsx\"}`\n  );\n\n  if (!nextSys.appDir) {\n    const appDir = sys.join(rootDir, \"app\");\n    if (await sys.exists(appDir)) {\n      nextSys.appDir = appDir;\n    }\n  }\n\n  if (!nextSys.pagesDir) {\n    const pagesDir = sys.join(rootDir, \"pages\");\n    if (await sys.exists(pagesDir)) {\n      nextSys.pagesDir = pagesDir;\n    }\n  }\n\n  if (!nextSys.appDir && !nextSys.pagesDir) {\n    throw new Error(\n      `Could not find Next.js \"app\" or \"pages\" directory. Searched in \"${rootDir}\".`\n    );\n  }\n\n  return nextSys;\n}\n\nasync function getNextConfigPath(sys: DevToolsSys) {\n  const nextConfigTsPath = sys.join(sys.getAppRootDir(), \"next.config.ts\");\n  if (await sys.exists(nextConfigTsPath)) {\n    return nextConfigTsPath;\n  }\n\n  const nextConfigMjsPath = sys.join(sys.getAppRootDir(), \"next.config.mjs\");\n  if (await sys.exists(nextConfigMjsPath)) {\n    return nextConfigMjsPath;\n  }\n\n  const nextConfigJsPath = sys.join(sys.getAppRootDir(), \"next.config.js\");\n  if (await sys.exists(nextConfigJsPath)) {\n    return nextConfigJsPath;\n  }\n\n  throw new Error(\n    `Could not find Next.js config file. Searched for \"next.config.ts\", \"next.config.mjs\" and \"next.config.js\" in \"${sys.getAppRootDir()}\".`\n  );\n}\n\n/**\n * Any Next.js-specific features that are enabled. This can be used to adjust how\n * Dev Tools integrates with Next.js apps based on the installed version of\n * Next.js.\n */\ninterface NextDevToolsFeatures {\n  /**\n   * If `true`, Next.js params will be awaited before accessed.\n   * Only applies to Next.js 15+\n   */\n  asyncParams: boolean;\n}\n\nexport interface NextDevToolsSys extends DevToolsSys {\n  appDir: string | null;\n  pagesDir: string | null;\n  srcDir: string | null;\n  componentsDir: string;\n  khulnasoftComponentPath: string;\n  registryPath: string;\n  nextConfigPath: string;\n  typescriptEnabled: boolean;\n  addExternalPackage: (pkgName: string) => void;\n  features: NextDevToolsFeatures;\n}\n", "import type { EnvInfo } from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getQwikApiKey(sys: QwikDevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    QWIK_KHULNASOFT_API_KEY_ENV\n  );\n  return env;\n}\n\nexport async function setQwikApiKey(\n  sys: QwikDevToolsSys,\n  publicApiKey: string\n) {\n  setKhulnasoftPublicApiKeyEnvVar(publicApiKey);\n\n  const env = await getQwikApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nfunction setKhulnasoftPublicApiKeyEnvVar(publicApiKey: string) {\n  if (typeof process !== \"undefined\") {\n    process.env[QWIK_KHULNASOFT_API_KEY_ENV] = publicApiKey;\n  }\n}\n\nconst QWIK_KHULNASOFT_API_KEY_ENV = `PUBLIC_KHULNASOFT_API_KEY`;\n", "export function ensureComments(\n  code: string,\n  commentText: string[],\n  lineTextAfterComments: string\n) {\n  if (lineTextAfterComments.length === 0) {\n    return code;\n  }\n\n  const lines = code.split(\"\\n\");\n  const lineIndex = lines.findIndex((l) => l.includes(lineTextAfterComments));\n  if (lineIndex === -1) {\n    return code;\n  }\n\n  const hasComments = lines.some((l) => l.includes(commentText[0]));\n  if (hasComments) {\n    return code;\n  }\n\n  const commentLines = [\n    `/**`,\n    ...commentText.map((c) => ` * ${c.trim()}`),\n    ` */`,\n  ];\n  lines.splice(lineIndex, 0, ...commentLines);\n\n  return lines.join(\"\\n\");\n}\n", "import type ts from \"typescript\";\nimport type { QwikDevToolsSys } from \"./index\";\nimport type { ComponentInfo } from \"../../../types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentDisplayNameFromFilePath,\n  getComponentImportNameFilePath,\n  getDisplayFilePath,\n  getComponentImportPath,\n} from \"../../../common/utils\";\nimport {\n  getExportedStatements,\n  type ExportedStatement,\n} from \"../../../common/ast/exported-statements\";\n\nexport async function getQwikComponentsFromDir(\n  sys: QwikDevToolsSys,\n  tsProgram: ts.Program\n) {\n  const cmps: QwikComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (fileName.startsWith(\".\")) {\n        return;\n      }\n      if (QWIK_SKIP.has(fileName)) {\n        return;\n      }\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.registryPath) {\n        return;\n      }\n      const fileCmps = await getQwikComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile\n      );\n      cmps.push(...fileCmps);\n    })\n  );\n\n  return cmps;\n}\n\nexport async function getQwikComponentsFromPath(\n  sys: QwikDevToolsSys,\n  filePath: string\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getQwikComponentsFromCode(sys, filePath, code);\n    }\n  }\n  return null;\n}\n\nexport function getQwikComponentsFromCode(\n  sys: QwikDevToolsSys,\n  filePath: string,\n  code: string\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getQwikComponentsFromSourceFile(sys, null, filePath, sourceFile);\n}\n\nexport async function getQwikComponentsFromSourceFile(\n  sys: QwikDevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile\n) {\n  filePath = sys.normalize(filePath);\n  const fileCmps: QwikComponentSource[] = [];\n\n  const exports = getExportedStatements(sys, sourceFile);\n\n  await Promise.all(\n    exports.map(async (exp) => {\n      const sCmp = await getQwikComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        exp\n      );\n      if (sCmp) {\n        fileCmps.push(sCmp);\n      }\n    })\n  );\n\n  return fileCmps;\n}\n\nasync function getQwikComponentSource(\n  sys: QwikDevToolsSys,\n  _typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  exp: ExportedStatement\n): Promise<QwikComponentSource | null> {\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  if (sys.ts.isVariableStatement(exp.node)) {\n    for (const declaration of exp.node.declarationList.declarations) {\n      const cmpExp = getQwikComponentExpression(sys, declaration.initializer);\n      if (cmpExp && sys.ts.isIdentifier(declaration.name)) {\n        const cmpName = declaration.name.text;\n        return {\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, cmpName),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: [],\n            exportName: exp.isDefaultExport ? \"default\" : cmpName,\n            exportType: exp.isDefaultExport ? \"default\" : \"named\",\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath,\n          },\n          node: cmpExp,\n        };\n      }\n    }\n  } else if (sys.ts.isCallExpression(exp.node)) {\n    const cmpExp = getQwikComponentExpression(sys, exp.node);\n    if (cmpExp) {\n      return {\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, \"default\"),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: getComponentDisplayNameFromFilePath(sys, filePath),\n          inputs: [],\n          exportName: \"default\",\n          exportType: \"default\",\n          importName: getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n        },\n        node: cmpExp,\n      };\n    }\n  }\n  return null;\n}\n\nfunction getQwikComponentExpression(\n  sys: QwikDevToolsSys,\n  exp: ts.Expression | undefined\n) {\n  if (exp && sys.ts.isCallExpression(exp)) {\n    if (\n      sys.ts.isIdentifier(exp.expression) &&\n      exp.expression.text === \"component$\" &&\n      exp.arguments.length > 0\n    ) {\n      const arg = exp.arguments[0];\n      if (sys.ts.isArrowFunction(arg) || sys.ts.isFunctionExpression(arg)) {\n        const srcNode: QwikComponentSourceNode = {\n          callExpression: exp,\n          fnNode: arg,\n        };\n        return srcNode;\n      }\n    }\n  }\n  return null;\n}\n\nexport interface QwikComponentSourceNode {\n  callExpression: ts.CallExpression;\n  fnNode: ts.Node;\n}\n\nexport interface QwikComponentSource {\n  cmpInfo: ComponentInfo;\n  node: QwikComponentSourceNode;\n}\n\nconst QWIK_SKIP = new Set([\n  \"node_modules\",\n  \"layout.tsx\",\n  \"404.tsx\",\n  \"router-head.tsx\",\n]);\n", "import type { QwikDevToolsSys } from \".\";\nimport {\n  getQwikComponentsFromSourceFile,\n  type QwikComponentSource,\n} from \"./qwik-components\";\nimport { getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\n\nexport async function parseQwikComponentSourceInputs(\n  sys: QwikDevToolsSys,\n  srcCmp: QwikComponentSource\n) {\n  const fnNode = srcCmp.node.fnNode;\n\n  if (sys.ts.isArrowFunction(fnNode) || sys.ts.isFunctionExpression(fnNode)) {\n    const fnParams = fnNode.parameters;\n    if (fnParams.length > 0) {\n      const { sourceFile, typeChecker } = await getTypeChecker(\n        sys,\n        srcCmp.cmpInfo.filePath,\n        null\n      );\n      const typedSrcCmps = await getQwikComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        srcCmp.cmpInfo.filePath,\n        sourceFile\n      );\n      const typedSrcCmp = typedSrcCmps.find(\n        (t) => t.cmpInfo.id === srcCmp.cmpInfo.id\n      );\n      if (!typedSrcCmp) {\n        throw new Error(\n          `createComponentInputs() Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`\n        );\n      }\n      return parseComponentSourcePropsFromNode(sys, typeChecker, fnNode);\n    }\n  }\n  return [];\n}\n", "import type { ModifiedFile } from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\n\nexport async function qwikEnsureKhulnasoftSetup(sys: QwikDevToolsSys) {\n  return qwikEnsureKhulnasoftRegistry(sys);\n}\n\nexport async function qwikEnsureKhulnasoftRegistry(sys: QwikDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, DEFAULT_REGISTRY);\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nconst DEFAULT_REGISTRY = `import type { RegisteredComponent } from \"@khulnasoft.com/sdk-qwik\";\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];\n`;\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { QwikDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getQwikComponentsFromPath } from \"./qwik-components\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport { parseRegisteredComponentInfo } from \"../../../common/ast/component-info\";\nimport { qwikEnsureKhulnasoftRegistry } from \"./qwik-ensure-khulnasoft-setup\";\n\nexport async function parseQwikRegistryFromFile(sys: QwikDevToolsSys) {\n  await qwikEnsureKhulnasoftRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseQwikRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseQwikRegistryFromCode(\n  sys: QwikDevToolsSys,\n  code: string\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseQwikRegisteredComponent(sys, sourceFile, cmpElm);\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      })\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseQwikRegisteredComponent(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n  };\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\" && sys.ts.isIdentifier(p.initializer)) {\n      const identifierName = p.initializer.text;\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n      cmp.importPath = getComponentImportPath(sys, i.filePath);\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const cmps = await getQwikComponentsFromPath(sys, i.filePath);\n      if (cmps && cmps.length > 0) {\n        if (cmps.length === 1) {\n          cmp.exportName = cmps[0].cmpInfo.exportName;\n        } else {\n          const namedCmp = cmps.find(\n            (c) => c.cmpInfo.exportName === identifierName\n          );\n          if (namedCmp) {\n            cmp.exportName = namedCmp.cmpInfo.exportName;\n          }\n        }\n      }\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(sys, cmp.filePath, cmp.exportName);\n  }\n\n  return cmp;\n}\n", "import type { DevToolsSys } from \"../../index\";\nimport { createTsProgram } from \"../../../common/typescript\";\n\nexport async function createQwikTsProgram(sys: DevToolsSys) {\n  const entryPaths = new Set<string>();\n\n  const recursive = async (childDir: string) => {\n    const itemNames = await sys.readdir(childDir);\n\n    await Promise.all(\n      itemNames.map(async (itemName) => {\n        if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n          return;\n        }\n\n        const itemPath = sys.join(childDir, itemName);\n        const ext = sys.extname(itemName).toLowerCase();\n        if (ext === \".tsx\" || ext === \".ts\") {\n          entryPaths.add(itemPath);\n          return;\n        }\n\n        const stat = await sys.stat(itemPath);\n        if (stat.isDirectory()) {\n          await recursive(itemPath);\n        }\n      })\n    );\n  };\n\n  await recursive(sys.getAppRootDir());\n\n  const tsProgram = await createTsProgram(sys, [...entryPaths]);\n  return tsProgram;\n}\n", "import type ts from \"typescript\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\nimport type { QwikComponentSource } from \"./qwik-components\";\nimport { ensureComments } from \"../../../common/ast/ensure-comments\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { getDisplayFilePath, getImportPath } from \"../../../common/utils\";\nimport { getQwikComponentsFromDir } from \"./qwik-components\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport { parseQwikComponentSourceInputs } from \"./qwik-component-source-inputs\";\nimport { parseQwikRegisteredComponent } from \"./qwik-registry-parse\";\nimport { parseQwikRegistryFromFile } from \"./qwik-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createQwikTsProgram } from \"./qwik-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getQwikApiKey } from \"./qwik-api-key\";\n\nexport async function qwikComponentRegistry(\n  sys: QwikDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean\n) {\n  const tsProgram = await createQwikTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, qwikApiKey] = await Promise.all([\n    getQwikComponentsFromDir(sys, tsProgram),\n    parseQwikRegistryFromFile(sys),\n    getQwikApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  const registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: qwikApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    // TODO!!!\n    return cmpRegistry;\n  }\n\n  if (cmpId != null) {\n    const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n    if (!srcCmp) {\n      throw new Error(`Component ${cmpId} not found`);\n    }\n\n    let sourceFile = parsedRegistry.sourceFile;\n\n    const cmpInfo = cmpRegistry.components.find((c) => c.id === cmpId)!;\n    const sourceInputs = await parseQwikComponentSourceInputs(sys, srcCmp);\n    mergeComponentInputs(cmpInfo, sourceInputs);\n\n    // TODO!!\n    // allow for multiple cmp ids\n    cmpId = Array.isArray(cmpId) ? cmpId[0] : cmpId;\n\n    const update = updateRegistry(\n      cmpId,\n      sourceComponents,\n      registeredComponents,\n      registerCmp,\n      unregisterCmp,\n      setCmpInfo,\n      setCmpInput\n    );\n\n    const {\n      elements,\n      elmIndex,\n      statementIndex,\n      statement,\n      variableDeclaration,\n    } = await getQwikRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n    let madeChanges = false;\n\n    if (update.addCmpToRegistry) {\n      // not already registered, append it\n      elements.push(\n        createQwikRegisteredComponent(sys, update.addCmpToRegistry)\n      );\n      madeChanges = true;\n    } else if (update.removeCmpFromRegistry) {\n      // already registered, remove it\n      elements.splice(elmIndex, 1);\n      madeChanges = true;\n    } else if (update.updateRegisteredCmp) {\n      // already registered, update component info\n      elements[elmIndex] = updateComponentObjLiteralInfoProperties(\n        sys,\n        elements[elmIndex],\n        update.updateRegisteredCmp\n      );\n      madeChanges = true;\n    }\n\n    if (madeChanges && writeRegistry) {\n      const statements = [...sourceFile.statements];\n      statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n        statement,\n        statement.modifiers,\n        sys.ts.factory.updateVariableDeclarationList(\n          statement.declarationList,\n          [\n            sys.ts.factory.updateVariableDeclaration(\n              variableDeclaration,\n              variableDeclaration.name,\n              variableDeclaration.exclamationToken,\n              variableDeclaration.type,\n              sys.ts.factory.createArrayLiteralExpression(\n                normalizeRegisteredArrayElements(sys, elements)\n              )\n            ),\n          ]\n        )\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      if (cmpInfo.exportType === \"named\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [cmpInfo.importName],\n          importPath: getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n        });\n      } else {\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: cmpInfo.importName,\n          importPath: getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n        });\n      }\n\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [\"RegisteredComponent\"],\n        importPath: \"@khulnasoft.com/sdk-qwik\",\n        isTypeOnly: true,\n      });\n\n      sourceFile = ensureArrayStatement(sys, sourceFile, {\n        variableName: \"CUSTOM_COMPONENTS\",\n        arrayType: \"RegisteredComponent\",\n      });\n\n      sourceFile = removeUnusedImports(sys, sourceFile);\n      sourceFile = normalizeImports(sys, sourceFile);\n\n      let code = sourceToCode(sys, sourceFile);\n      code = normalizeLineBreaks(code);\n      code = ensureComments(code, COMMENTS, \"CUSTOM_COMPONENTS\");\n      code = await sys.formatCode(sys.registryPath, code);\n      await sys.writeFile(sys.registryPath, code);\n    }\n\n    cmpRegistry.components = update.components;\n  }\n\n  return cmpRegistry;\n}\n\nfunction createQwikRegisteredComponent(\n  sys: QwikDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        sys.ts.factory.createPropertyAssignment(\n          \"component\",\n          sys.ts.factory.createIdentifier(cmpInfo.importName)\n        ),\n      ],\n      true\n    ),\n    cmpInfo\n  );\n}\n\nasync function getQwikRegisteredComponentSource(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: QwikComponentSource\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Khulnasoft registry must be \"CUSTOM_COMPONENTS\". Please update your Khulnasoft registry file: ${sys.registryPath}`\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseQwikRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i]\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nconst COMMENTS = [\n  `This array is used to integrate custom components within Khulnasoft.`,\n  `https://www.khulnasoft.com/c/docs/custom-components-intro`,\n  ``,\n  `These components will be found the \"Custom Components\"`,\n  `section of Khulnasoft's visual editor.`,\n  `You can also turn on \"components only mode\" to limit`,\n  `editing to only these components.`,\n  `https://www.khulnasoft.com/c/docs/guides/components-only-mode`,\n];\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getKhulnasoftCache, setKhulnasoftCache } from \"../../../common/cache\";\nimport { getQwikApiKey, setQwikApiKey } from \"./qwik-api-key\";\nimport { qwikComponentRegistry } from \"./qwik-registry\";\nimport { qwikEnsureKhulnasoftSetup } from \"./qwik-ensure-khulnasoft-setup\";\nimport { findKhulnasoftRegistry, recursiveFindDir } from \"../../../common/fs\";\n\nexport async function createQwikCityDevTools(sys: CreateDevToolsOptions) {\n  const qwikSys = await createQwikDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    khulnasoftPageOptions: async () => {\n      return {\n        templateContentId: \"dc70f1d979ad416d8fd357137eb9ddfb\",\n        pathname: \"/\",\n        title: \"Khulnasoft + Qwik Demo Page\",\n      };\n    },\n    ensureKhulnasoftSetup: () => {\n      return qwikEnsureKhulnasoftSetup(qwikSys);\n    },\n    ensureFigmaImportPage: async () => {\n      return [];\n    },\n    getRegistryPath: () => {\n      return qwikSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes\n      );\n    },\n    addExternalPackage: async (_pkgName: string) => {},\n    loadComponent: async (opts) => {\n      const r = await qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false\n      );\n    },\n    unregisterComponent: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    getPublicApiKey: () => {\n      return getQwikApiKey(qwikSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setQwikApiKey(qwikSys, opts.publicApiKey);\n    },\n    getDependencies: (_opts) => {\n      return [\n        { name: \"@khulnasoft.com/dev-tools\" },\n        { name: \"@khulnasoft.com/sdk-qwik\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getKhulnasoftCache(qwikSys),\n    setCache: (cache) => setKhulnasoftCache(qwikSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createQwikDevToolsSys(sys: DevToolsSys) {\n  const componentsDir = await recursiveFindDir(\n    sys,\n    sys.getAppRootDir(),\n    \"components\"\n  );\n  if (!componentsDir) {\n    throw new Error(\n      `Could not find components directory within project: ${sys.getAppRootDir()}`\n    );\n  }\n\n  const registryPath = await findKhulnasoftRegistry(sys, componentsDir);\n  const envPath = sys.join(sys.getAppRootDir(), \".env\");\n\n  const qwikSys: QwikDevToolsSys = {\n    ...sys,\n    componentsDir,\n    registryPath,\n    envPath,\n  };\n  return qwikSys;\n}\n\nexport interface QwikDevToolsSys extends DevToolsSys {\n  componentsDir: string;\n  registryPath: string;\n  envPath: string;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getRemixApiKey(sys: DevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    REMIX_KHULNASOFT_API_KEY_ENV\n  );\n  return env;\n}\n\nexport async function setRemixApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getRemixApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const REMIX_KHULNASOFT_API_KEY_ENV = `PUBLIC_KHULNASOFT_KEY`;\n", "import type { RemixDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport {\n  getReactComponentsFromSourceFile,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { shouldSkipFolder } from \"../../../common/utils\";\n\nconst SKIP_FOLDERS = new Set([\"dist\", \"node_modules\"]);\n\nexport async function getRemixSourceComponentsFromDir(\n  sys: RemixDevToolsSys,\n  tsProgram: ts.Program\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const buildDir = sys.join(sys.getAppRootDir(), \"build\");\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (\n        fileName.startsWith(\".\") ||\n        fileName === \"node_modules\" ||\n        shouldSkipFolder(sys, SKIP_FOLDERS, sourceFile.fileName) ||\n        SKIP_APP_FILES.has(fileName) ||\n        fileName.includes(\"$.\")\n      ) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.remixConfigPath || filePath === buildDir) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath\n      );\n      cmps.push(...fileCmps);\n    })\n  );\n\n  return cmps;\n}\n\n// https://remix.run/docs/en/main/file-conventions/route-files-v2\nconst SKIP_APP_FILES = new Set([\n  \"root.tsx\",\n  \"root.ts\",\n  \"root.jsx\",\n  \"root.js\",\n  \"_index.tsx\",\n  \"_index.jsx\",\n  \"_index.ts\",\n  \"_index.js\",\n]);\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { RemixDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  isMapperFile,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { remixEnsureKhulnasoftRegistry } from \"./remix-ensure-khulnasoft-setup\";\nimport { getReactComponentsFromPath } from \"../react/react-components\";\n\nexport async function parseRemixRegistryFromFile(sys: RemixDevToolsSys) {\n  await remixEnsureKhulnasoftRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseRemixRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseRemixRegistryFromCode(\n  sys: RemixDevToolsSys,\n  code: string\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseRemixRegisteredComponent(\n          sys,\n          sourceFile,\n          cmpElm\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      })\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseRemixRegisteredComponent(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n  };\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n    if (acceptsChildren) {\n      cmp.acceptsChildren = true;\n    }\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      } else if (sys.ts.isCallExpression(initializer)) {\n        const fnIdentifier =\n          sys.ts.isIdentifier(initializer.expression) &&\n          initializer.expression.text;\n\n        if (fnIdentifier === \"withChildren\") {\n          cmp.acceptsChildren = true;\n        }\n        const arg = initializer.arguments[0];\n        if (sys.ts.isIdentifier(arg)) {\n          identifierName = arg.text;\n        }\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      if (cmp.externalImportPath) {\n        cmp.exportName = identifierName;\n      } else {\n        const cmps = await getReactComponentsFromPath(\n          sys,\n          i.filePath,\n          sys.registryPath === i.filePath || isMapperFile(i.filePath)\n        );\n        if (cmps && cmps.length > 0) {\n          if (cmps.length === 1) {\n            cmp.exportName = cmps[0].cmpInfo.exportName;\n          } else {\n            const namedCmp = cmps.find(\n              (c) => c.cmpInfo.exportName === identifierName\n            );\n            if (namedCmp) {\n              cmp.exportName = namedCmp.cmpInfo.exportName;\n            }\n          }\n        }\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n} from \"../../../types\";\nimport type { RemixDevToolsSys } from \"./index\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getRemixSourceComponentsFromDir } from \"./remix-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseRemixRegisteredComponent,\n  parseRemixRegistryFromFile,\n} from \"./remix-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getRemixApiKey } from \"./remix-api-key\";\n\nexport async function remixComponentRegistry(\n  sys: RemixDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, remixApiKey] = await Promise.all([\n    getRemixSourceComponentsFromDir(sys, tsProgram),\n    parseRemixRegistryFromFile(sys),\n    getRemixApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: remixApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n    ? [cmpId]\n    : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath))\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath)\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput\n      );\n\n      const {\n        elements,\n        elmIndex,\n        statementIndex,\n        statement,\n        variableDeclaration,\n      } = await getRemixRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n      if (update.addCmpToRegistry) {\n        // not already registered, append it\n        elements.push(\n          createRemixRegisteredComponent(sys, update.addCmpToRegistry)\n        );\n        madeChanges = true;\n      } else if (update.removeCmpFromRegistry) {\n        // already registered, remove it\n        elements.splice(elmIndex, 1);\n        madeChanges = true;\n      } else if (update.updateRegisteredCmp) {\n        // already registered, update component info\n        const element = updateComponentObjLiteralInfoProperties(\n          sys,\n          elements[elmIndex],\n          update.updateRegisteredCmp\n        );\n        elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n          element,\n          [\n            createRemixComponentPropertyAssignment(\n              sys,\n              update.updateRegisteredCmp\n            ),\n            ...element.properties.slice(1),\n          ]\n        );\n        madeChanges = true;\n      }\n\n      if (madeChanges && writeRegistry) {\n        const statements = [...sourceFile.statements];\n        statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n          statement,\n          statement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            statement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                variableDeclaration,\n                variableDeclaration.name,\n                variableDeclaration.exclamationToken,\n                variableDeclaration.type,\n                sys.ts.factory.createArrayLiteralExpression(\n                  normalizeRegisteredArrayElements(sys, elements)\n                )\n              ),\n            ]\n          )\n        );\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        if (cmpInfo.exportType === \"named\") {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [cmpInfo.importName],\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        } else {\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: cmpInfo.importName,\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        }\n\n        const sdkImportPath =\n          sys.sdkVersion === SDK_VERSIONS.gen2\n            ? \"@khulnasoft.com/sdk-react\"\n            : \"@khulnasoft.com/react\";\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [\"RegisteredComponent\"],\n          importPath: sdkImportPath,\n          isTypeOnly: true,\n        });\n\n        if (cmpInfo.acceptsChildren && sys.sdkVersion !== SDK_VERSIONS.gen2) {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"withChildren\"],\n            importPath: \"@khulnasoft.com/react\",\n          });\n        }\n\n        sourceFile = ensureArrayStatement(sys, sourceFile, {\n          variableName: \"CUSTOM_COMPONENTS\",\n          arrayType: \"RegisteredComponent\",\n        });\n\n        cmpRegistry.components = update.components;\n        registeredComponents = update.components.filter((c) => c.isRegistered);\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createRemixComponentPropertyAssignment(\n  sys: RemixDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return sys.ts.factory.createPropertyAssignment(\n      \"component\",\n      sys.ts.factory.createIdentifier(cmpInfo.importName)\n    );\n  }\n\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName),\n    initializer = cmpInfo.acceptsChildren\n      ? sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(\"withChildren\"),\n          undefined,\n          [identifier]\n        )\n      : identifier;\n\n  return sys.ts.factory.createPropertyAssignment(\"component\", initializer);\n}\n\nfunction createRemixRegisteredComponent(\n  sys: RemixDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        createRemixComponentPropertyAssignment(sys, cmpInfo),\n        ...(cmpInfo.acceptsChildren && sys.sdkVersion === SDK_VERSIONS.gen2\n          ? [\n              sys.ts.factory.createPropertyAssignment(\n                \"canHaveChildren\",\n                sys.ts.factory.createTrue()\n              ),\n            ]\n          : []),\n      ],\n      true\n    ),\n    cmpInfo\n  );\n}\n\nasync function getRemixRegisteredComponentSource(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Khulnasoft registry must be \"CUSTOM_COMPONENTS\". Please update your Khulnasoft registry file: ${sys.registryPath}`\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseRemixRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i]\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { RemixDevToolsSys } from \".\";\nimport { remixComponentRegistry } from \"./remix-registry\";\nimport { REMIX_KHULNASOFT_API_KEY_ENV } from \"./remix-api-key\";\nimport { getImportPath } from \"../../../common/utils\";\n\n// https://www.khulnasoft.com/c/docs/quickstart\n\nexport async function remixEnsureKhulnasoftSetup(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await remixEnsureCounterComponent(sys, modifiedFiles);\n  modifiedFiles.push(...(await remixEnsureKhulnasoftRegistry(sys)));\n\n  await remixEnsureCounterRegistered(sys, counterCmpPath);\n  await remixEnsureAppRoute(sys, modifiedFiles);\n\n  return modifiedFiles;\n}\n\nexport async function remixEnsureFigmaImportSetup(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  modifiedFiles.push(...(await remixEnsureKhulnasoftRegistry(sys)));\n\n  await remixEnsureFigmaImportRoute(sys, modifiedFiles);\n\n  return modifiedFiles;\n}\n\nasync function remixEnsureFigmaImportRoute(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[]\n) {\n  let routeFileName = `figma-imports.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  if (sys.hasLocaleParam) {\n    sys.debug(`remixEnsureFigmaImportRoute, hasLocaleParam`);\n    routeFileName = `($locale).${routeFileName}`;\n  }\n\n  const routePath = sys.join(sys.routesDir, routeFileName);\n  const hasRoute = await sys.exists(routePath);\n\n  sys.debug(`remixEnsureFigmaImportRoute, hasRoute: ${hasRoute}`);\n\n  const code = await sys.formatCode(\n    routePath,\n    getRemixAppRoute({ sys, routePath, modelName: \"figma-imports\" })\n  );\n  await sys.writeFile(routePath, code);\n  modifiedFiles.push({\n    filePath: routePath,\n    modifiedType: hasRoute ? \"update\" : \"create\",\n  });\n}\n\nasync function remixEnsureAppRoute(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[]\n) {\n  let routeFileName = `$.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  if (sys.hasLocaleParam) {\n    sys.debug(`remixEnsureAppRoute, hasLocaleParam`);\n    routeFileName = `($locale).${routeFileName}`;\n  }\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    routeFileName = `($slug)._index.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  }\n\n  const routePath = sys.join(sys.routesDir, routeFileName);\n  const hasRoute = await sys.exists(routePath);\n\n  sys.debug(`remixEnsureAppRoute, hasRoute: ${hasRoute}`);\n\n  const code = await sys.formatCode(\n    routePath,\n    getRemixAppRoute({ sys, routePath, modelName: \"page\" })\n  );\n  await sys.writeFile(routePath, code);\n  modifiedFiles.push({\n    filePath: routePath,\n    modifiedType: hasRoute ? \"update\" : \"create\",\n  });\n}\n\nfunction getRemixAppRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: RemixDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n\n  const registryImportPath = getImportPath(sys, routePath, sys.registryPath);\n\n  let loaderArgsImport = ``;\n  let loaderArgsType = ``;\n  if (ts) {\n    loaderArgsImport = `import type { LoaderArgs } from '@remix-run/server-runtime';`;\n    loaderArgsType = `: LoaderArgs`;\n  }\n\n  let envVar = `process.env.${REMIX_KHULNASOFT_API_KEY_ENV}`;\n  if (sys.getFrameworks().some((f) => f.name === \"@shopify/remix-oxygen\")) {\n    // hydrogen uses the context object in the loader\n    envVar = `context.env.${REMIX_KHULNASOFT_API_KEY_ENV}`;\n  }\n  if (ts) {\n    envVar += `!`;\n  }\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n    \nimport {\n  Content,\n  fetchOneEntry,\n  getKhulnasoftSearchParams,\n  isPreviewing,\n} from \"@khulnasoft.com/sdk-react\";\n${ts ? `import type { LoaderFunctionArgs } from \"@remix-run/node\";` : ``}\nimport { useLoaderData } from \"@remix-run/react\";\nimport { fetch ${ts ? \"as webFetch\" : \"\"}} from \"@remix-run/web-fetch\";\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n\nexport const loader = async ({ params, request }${\n      ts ? \": LoaderFunctionArgs\" : \"\"\n    }) => {\n  const khulnasoftApiKey = ${envVar};\n  const url = new URL(request.url);\n  const urlPath = \\`/\\${params[\"slug\"] || \"\"}\\`;\n\n  const page = await fetchOneEntry({\n    model: \"${modelName}\",\n    apiKey: khulnasoftApiKey,\n    options: getKhulnasoftSearchParams(url.searchParams),\n    userAttributes: { urlPath },\n    fetch: webFetch,\n  });\n\n  if (!page && !isPreviewing(url.search)) {\n    throw new Response(\"Page Not Found\", {\n      status: 404,\n      statusText: \"Page not found in Khulnasoft.com\",\n    });\n  }\n\n  return { page, khulnasoftApiKey };\n};\n\n// Define and render the page.\nexport default function Page() {\n  const { page, khulnasoftApiKey } = useLoaderData${ts ? \"<typeof loader>\" : \"\"}();\n  // Render the page content from Khulnasoft.com\n  return (\n    <Content\n      model=\"${modelName}\"\n      apiKey={khulnasoftApiKey}\n      content={page}\n      customComponents={CUSTOM_COMPONENTS}\n    />\n  );\n}\n    `;\n  }\n\n  return `\nimport { KhulnasoftComponent, khulnasoft } from \"@khulnasoft.com/react\";\nimport { useLoaderData } from \"@remix-run/react\";\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n${loaderArgsImport}\n\n// Fetch contents of the page\nexport const loader = async ({ params, request, context }${loaderArgsType}) => {\n  // Initialize the Khulnasoft client and pass in your Public API Key\n  const khulnasoftApiKey = ${envVar};\n  khulnasoft.init(khulnasoftApiKey);\n\n  // Fetch data content from Khulnasoft.com based on the URL path\n  const page = await khulnasoft\n    .get(\"${modelName}\", {\n      userAttributes: {\n        urlPath: \"/\" + params[\"*\"],\n      },\n      locale: params.locale,\n    })\n    .toPromise();\n\n  // Verify the user is previewing or editing in Khulnasoft\n  const isPreviewing = new URL(request.url).searchParams.has(\"khulnasoft.preview\");\n\n  // If the page is not found and the user is not previewing, throw a 404.\n  // The CatchBoundary component will catch the error\n  if (!page && !isPreviewing) {\n    throw new Response(\"Page Not Found\", {\n      status: 404,\n      statusText:\n        \"We couldn't find this page, please check your url path and if the page is published on Khulnasoft.com.\",\n    });\n  }\n\n  return { page, khulnasoftApiKey };\n};\n\n// Define and render the page.\nexport default function Page() {\n  // Use the useLoaderData hook to get the Page data from \"loader\" above.\n  const { page, khulnasoftApiKey } = useLoaderData${ts ? `<typeof loader>` : ``}();\n\n  // Render the page content from Khulnasoft.com\n  return (\n    <KhulnasoftComponent\n      customComponents={CUSTOM_COMPONENTS}\n      apiKey={khulnasoftApiKey}\n      model=\"${modelName}\"\n      content={page}\n    />\n  );\n}\n\n${\n  ts\n    ? `\ndeclare global {\n  interface Env {\n    ${REMIX_KHULNASOFT_API_KEY_ENV}: string;\n  }\n}\n`\n    : ``\n}\n`;\n}\n\nasync function remixEnsureCounterComponent(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[]\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  const hasCounterCmp = await sys.exists(counterCmpPath);\n\n  sys.debug(`remixEnsureCounterComponent, hasCounterCmp: ${hasCounterCmp}`);\n\n  if (!hasCounterCmp) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  const hasCounterStyles = await sys.exists(counterStylesPath);\n\n  sys.debug(\n    `remixEnsureCounterComponent, hasCounterStyles: ${hasCounterStyles}`\n  );\n\n  if (!hasCounterStyles) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: RemixDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\nimport { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n  color: #1c6bd1;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nasync function remixEnsureCounterRegistered(\n  sys: RemixDevToolsSys,\n  counterCmpPath: string\n) {\n  const registry = await remixComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await remixComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false\n  );\n}\n\nexport async function remixEnsureKhulnasoftRegistry(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, getRemixKhulnasoftRegistry(sys));\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nfunction getRemixKhulnasoftRegistry(sys: RemixDevToolsSys) {\n  const isSdkGen2 = sys.sdkVersion === SDK_VERSIONS.gen2;\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from ${\n      isSdkGen2 ? `\"@khulnasoft.com/sdk-react\"` : `\"@khulnasoft.com/react\"`\n    };\n    \nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getKhulnasoftCache, setKhulnasoftCache } from \"../../../common/cache\";\nimport { getRemixApiKey, setRemixApiKey } from \"./remix-api-key\";\nimport {\n  findKhulnasoftRegistry,\n  hasTsconfig,\n  recursiveFindDir,\n} from \"../../../common/fs\";\nimport {\n  remixEnsureKhulnasoftSetup,\n  remixEnsureFigmaImportSetup,\n} from \"./remix-ensure-khulnasoft-setup\";\nimport { remixComponentRegistry } from \"./remix-registry\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"../react/react-khulnasoft-sdk-setup\";\n\nexport async function createRemixDevTools(sys: CreateDevToolsOptions) {\n  const remixSys = await createRemixDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    khulnasoftPageOptions: async () => {\n      const pathname = \"/khulnasoft-demo\";\n      const localePathname = remixSys.hasLocaleParam\n        ? `/en-us${pathname}`\n        : undefined;\n\n      return {\n        templateContentId: \"a5c9eef7909d4fc99554264a17de22c9\",\n        pathname,\n        localePathname,\n        title: \"Khulnasoft + Remix Demo Page\",\n      };\n    },\n    ensureKhulnasoftSetup: () => {\n      return remixEnsureKhulnasoftSetup(remixSys);\n    },\n    ensureFigmaImportPage: () => {\n      return remixEnsureFigmaImportSetup(remixSys);\n    },\n    getRegistryPath: () => {\n      return remixSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      remixSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false\n      );\n    },\n    unregisterComponent: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    getPublicApiKey: () => {\n      return getRemixApiKey(remixSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setRemixApiKey(remixSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@khulnasoft.com/dev-tools\" },\n          { name: \"@khulnasoft.com/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@khulnasoft.com/dev-tools\" },\n        { name: \"@khulnasoft.com/react\" },\n        { name: \"@khulnasoft.com/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getKhulnasoftCache(remixSys),\n    setCache: (cache) => setKhulnasoftCache(remixSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createRemixDevToolsSys(sys: DevToolsSys) {\n  const remixConfigPath = await getRemixConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const routesDir = await getRemixRoutesDir(sys);\n  const appDir = sys.dirname(routesDir);\n  const componentsDir = sys.join(appDir, \"components\");\n  const typescriptEnabled = await hasTsconfig(sys);\n  const registryPath = await findKhulnasoftRegistry(sys, appDir);\n  const externalPackages: Record<string, string> = {};\n\n  const remixSys: RemixDevToolsSys = {\n    ...sys,\n    registryPath,\n    remixConfigPath,\n    typescriptEnabled,\n    appDir,\n    componentsDir,\n    routesDir,\n    hasLocaleParam: await hasLocaleParam(sys, routesDir),\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[\n        sys.join(rootDir, pkgName, \"index.ts\")\n      ] = `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1)\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1)\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (sys.sdkVersion) {\n    remixSys.sdkVersion = sys.sdkVersion;\n  } else {\n    remixSys.sdkVersion = await detectReactSdkVersion(remixSys);\n  }\n\n  return remixSys;\n}\n\nasync function hasLocaleParam(sys: DevToolsSys, routesDir: string) {\n  const routesDirFiles = await sys.readdir(routesDir);\n  return routesDirFiles.some((f) => f.startsWith(`($locale).`));\n}\n\nasync function getRemixConfigPath(sys: DevToolsSys) {\n  const configs = [\n    \"remix.config.ts\",\n    \"remix.config.js\",\n    \"vite.config.ts\",\n    \"vite.config.js\",\n  ];\n  for (const configName of configs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return configPath;\n    }\n  }\n\n  throw new Error(\n    `Could not find Remix config file. Searched for ${configs.join(\n      \", \"\n    )} in \"${sys.getAppRootDir()}\".`\n  );\n}\n\nasync function getRemixRoutesDir(sys: DevToolsSys) {\n  const routesDir = await recursiveFindDir(sys, sys.getAppRootDir(), \"routes\");\n  if (routesDir) {\n    return routesDir;\n  }\n  throw new Error(\n    `Could not find Remix \"routes\" directory in \"${sys.getAppRootDir()}\". Please ensure this command is ran from within your Remix project's directory.`\n  );\n}\n\nexport interface RemixDevToolsSys extends DevToolsSys {\n  appDir: string;\n  componentsDir: string;\n  registryPath: string;\n  remixConfigPath: string;\n  typescriptEnabled: boolean;\n  routesDir: string;\n  hasLocaleParam: boolean;\n  addExternalPackage: (pkgName: string) => void;\n}\n", "import type { EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\nimport type { ReactDevToolsSys } from \".\";\n\nexport async function getReactApiKey(sys: ReactDevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n  const publicApiKey =\n    sys.configType === \"vite\"\n      ? REACT_VITE_KHULNASOFT_KEY_ENV\n      : REACT_WEBPACK_KHULNASOFT_KEY_ENV;\n  const env = await getDotEnvValue(sys, dotEnvFileNames, publicApiKey);\n  return env;\n}\n\nexport async function setReactApiKey(\n  sys: ReactDevToolsSys,\n  publicApiKey: string\n) {\n  const env = await getReactApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const REACT_VITE_KHULNASOFT_KEY_ENV = `VITE_PUBLIC_KHULNASOFT_KEY`;\n\nexport const REACT_WEBPACK_KHULNASOFT_KEY_ENV = `YOUR_PUBLIC_KHULNASOFT_KEY`;\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { ReactDevToolsSys } from \".\";\nimport { codeToStatement } from \"../../../common/ast/transform\";\nimport { updateComponentObjLiteralInfoProperties } from \"../../../common/ast/component-info\";\n\nexport function createReactRegisteredComponent(\n  sys: ReactDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  let code = `Khulnasoft.registerComponent(\\n`;\n\n  code += `  ${cmpInfo.importName},\\n`;\n\n  code += `  {\n    name: \"${cmpInfo.name}\",\n  }\\n`;\n  code += `);`;\n\n  const registerStatement = codeToStatement(sys, code);\n\n  return updateReactRegisteredComponent(sys, registerStatement, cmpInfo);\n}\n\nexport function updateReactRegisteredComponent(\n  sys: ReactDevToolsSys,\n  registerStatement: ts.Statement,\n  cmpInfo: ComponentInfo\n) {\n  if (!sys.ts.isExpressionStatement(registerStatement)) {\n    return registerStatement;\n  }\n\n  const callExp = registerStatement.expression;\n  if (!sys.ts.isCallExpression(callExp)) {\n    return registerStatement;\n  }\n\n  const args = [...callExp.arguments];\n  if (args.length < 2) {\n    return registerStatement;\n  }\n\n  const cmpObjExp = args[1];\n  if (!sys.ts.isObjectLiteralExpression(cmpObjExp)) {\n    return registerStatement;\n  }\n\n  args[1] = updateComponentObjLiteralInfoProperties(sys, cmpObjExp, cmpInfo);\n\n  return sys.ts.factory.updateExpressionStatement(\n    registerStatement,\n    sys.ts.factory.updateCallExpression(\n      callExp,\n      callExp.expression,\n      callExp.typeArguments,\n      args\n    )\n  );\n}\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  resolveComponentPath,\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentDisplayNameFromFilePath,\n  getComponentId,\n  getComponentImportPath,\n  getDisplayFilePath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { REACT_VITE_KHULNASOFT_KEY_ENV } from \"./react-api-key\";\n\nexport async function parseReactRegistryFromFile(sys: ReactDevToolsSys) {\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseReactRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseReactRegistryFromCode(\n  sys: ReactDevToolsSys,\n  code: string\n) {\n  const sourceFile = codeToSource(sys, code);\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return parseReactRegistryFromSourceSdkGen2(sys, sourceFile);\n  }\n  return parseReactRegistryFromSource(sys, sourceFile);\n}\n\nasync function parseReactRegistryFromSource(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const cmps: ComponentInfo[] = [];\n\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const s = sourceFile.statements[i];\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"Khulnasoft\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName !== \"registerComponent\") {\n      continue;\n    }\n    const args = exp.arguments;\n    if (args.length < 2) {\n      continue;\n    }\n    const infoArg = args[1];\n    if (!sys.ts.isObjectLiteralExpression(infoArg)) {\n      continue;\n    }\n\n    const cmpArg = args[0];\n    if (sys.ts.isIdentifier(cmpArg)) {\n      // Khulnasoft.registerComponent(Component, {...} )\n      const cmp = await parseReactRegisteredIdentifierComponent(\n        sys,\n        sourceFile,\n        i,\n        cmpArg,\n        infoArg,\n        false\n      );\n      if (cmp) {\n        cmps.push(cmp);\n      }\n      continue;\n    }\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nasync function parseReactRegisteredIdentifierComponent(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  statementIndex: number,\n  identifierArg: ts.Identifier,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n  };\n\n  const importDeclarations = sourceFile.statements.filter((s) =>\n    sys.ts.isImportDeclaration(s)\n  ) as ts.ImportDeclaration[];\n\n  const defaultImportDeclaration = importDeclarations.find(\n    (s) => s.importClause && s.importClause.name?.text === identifierArg.text\n  );\n\n  if (defaultImportDeclaration) {\n    const importPath = defaultImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n    cmp.filePath = await resolveReactImportPath(sys, importPath.text);\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n    cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else {\n    const namedImportDeclaration = importDeclarations.find((s) => {\n      if (!s.importClause) {\n        return false;\n      }\n      if (!s.importClause.namedBindings) {\n        return false;\n      }\n      if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n        return false;\n      }\n      return s.importClause.namedBindings.elements.some(\n        (e) => e.name.text === identifierArg.text\n      );\n    });\n    if (!namedImportDeclaration) {\n      return null;\n    }\n    const importPath = namedImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n\n    const resolvedPath = await resolveReactImportPath(sys, importPath.text);\n\n    cmp.filePath = await resolveReactImportPath(sys, importPath.text);\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(identifierArg.text);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = identifierArg.text;\n    cmp.exportType = \"named\";\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath\n    );\n  }\n  return cmp;\n}\n\nfunction resolveReactImportPath(sys: ReactDevToolsSys, importPath: string) {\n  return resolveComponentPath(\n    sys,\n    sys.normalize(sys.resolve(sys.dirname(sys.registryPath), importPath))\n  );\n}\n\nexport function ensureKhulnasoftIsInitialized(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  typescriptEnabled: boolean\n) {\n  let isApiKeyInitialized = false;\n  let lastImportIndex = 0;\n\n  const statements = [...sourceFile.statements];\n\n  for (let i = 0; i < statements.length; i++) {\n    const s = statements[i];\n    if (sys.ts.isImportDeclaration(s)) {\n      lastImportIndex = i;\n      continue;\n    }\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"khulnasoft\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName == \"init\") {\n      isApiKeyInitialized = true;\n      break;\n    } else {\n      continue;\n    }\n  }\n\n  if (isApiKeyInitialized) {\n    return sourceFile;\n  }\n\n  // process.env.VITE_PUBLIC_KHULNASOFT_KEY\n  const envKeyExpression = sys.ts.factory.createPropertyAccessExpression(\n    sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"import\"),\n        sys.ts.factory.createIdentifier(\"meta\")\n      ),\n      sys.ts.factory.createIdentifier(\"env\")\n    ),\n    sys.ts.factory.createIdentifier(REACT_VITE_KHULNASOFT_KEY_ENV)\n  );\n\n  const nonNullEnvKeyExpression = typescriptEnabled\n    ? sys.ts.factory.createNonNullExpression(envKeyExpression)\n    : envKeyExpression;\n\n  const initializeKhulnasoftApiKey = sys.ts.factory.createExpressionStatement(\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"khulnasoft\"),\n        sys.ts.factory.createIdentifier(\"init\")\n      ),\n      undefined,\n      [nonNullEnvKeyExpression]\n    )\n  );\n\n  statements.splice(lastImportIndex + 1, 0, initializeKhulnasoftApiKey);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nasync function parseReactRegistryFromSourceSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const cmps: ComponentInfo[] = [];\n\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseReactRegisteredComponentSdkGen2(\n          sys,\n          sourceFile,\n          cmpElm\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      })\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseReactRegisteredComponentSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n  };\n\n  const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n\n  if (acceptsChildren) {\n    cmp.acceptsChildren = true;\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const importDeclarations = sourceFile.statements.filter((s) =>\n        sys.ts.isImportDeclaration(s)\n      ) as ts.ImportDeclaration[];\n\n      const defaultImportDeclaration = importDeclarations.find(\n        (s) => s.importClause && s.importClause.name?.text === identifierName\n      );\n\n      if (defaultImportDeclaration) {\n        const importPath = defaultImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n        cmp.exportName = \"default\";\n      } else {\n        const namedImportDeclaration = importDeclarations.find((s) => {\n          if (!s.importClause) {\n            return false;\n          }\n          if (!s.importClause.namedBindings) {\n            return false;\n          }\n          if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            return false;\n          }\n          return s.importClause.namedBindings.elements.some(\n            (e) => e.name.text === identifierName\n          );\n        });\n        if (!namedImportDeclaration) {\n          return null;\n        }\n        const importPath = namedImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n\n        cmp.exportName = identifierName;\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath\n    );\n  }\n\n  return cmp;\n}\n", "import {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n  type UpdateRegistry,\n} from \"../../../types\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport {\n  createReactRegisteredComponent,\n  updateReactRegisteredComponent,\n} from \"./react-component-info\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { getReactSourceComponentsFromDir } from \"./react-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseReactRegistryFromFile,\n  parseReactRegisteredComponentSdkGen2,\n} from \"./react-registry-parse\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getReactApiKey } from \"./react-api-key\";\nimport type ts from \"typescript\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { hasTsconfig } from \"../../../common/fs\";\n\nexport async function reactComponentRegistry(\n  sys: ReactDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, _typescriptEnabled, reactApiKey] =\n    await Promise.all([\n      getReactSourceComponentsFromDir(sys, tsProgram),\n      parseReactRegistryFromFile(sys),\n      hasTsconfig(sys),\n      getReactApiKey(sys),\n    ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: reactApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n    ? [cmpId]\n    : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath))\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath)\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput\n      );\n\n      if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n        const {\n          elements,\n          elmIndex,\n          statementIndex,\n          statement,\n          variableDeclaration,\n        } = await getReactRegisteredComponentSourceSdkGen2(\n          sys,\n          sourceFile,\n          srcCmp\n        );\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          elements.push(\n            createReactRegisteredComponentSdkGen2(sys, update.addCmpToRegistry)\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          elements.splice(elmIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          const element = updateComponentObjLiteralInfoProperties(\n            sys,\n            elements[elmIndex],\n            update.updateRegisteredCmp\n          );\n          const identifier = sys.ts.factory.createIdentifier(\n            update.updateRegisteredCmp.importName\n          );\n\n          elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n            element,\n            [\n              sys.ts.factory.createPropertyAssignment(\"component\", identifier),\n              ...element.properties.slice(1),\n            ]\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          const statements = [...sourceFile.statements];\n          statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n            statement,\n            statement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              statement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  variableDeclaration,\n                  variableDeclaration.name,\n                  variableDeclaration.exclamationToken,\n                  variableDeclaration.type,\n                  sys.ts.factory.createArrayLiteralExpression(\n                    normalizeRegisteredArrayElements(sys, elements)\n                  )\n                ),\n              ]\n            )\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureReactComponentImportStatements(\n            sys,\n            update,\n            sourceFile\n          );\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"RegisteredComponent\"],\n            importPath: \"@khulnasoft.com/sdk-react\",\n            isTypeOnly: true,\n          });\n\n          sourceFile = ensureArrayStatement(sys, sourceFile, {\n            variableName: \"CUSTOM_COMPONENTS\",\n            arrayType: \"RegisteredComponent\",\n          });\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered\n          );\n        }\n      } else {\n        let statements = [...sourceFile.statements];\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          statements.push(\n            createReactRegisteredComponent(sys, update.addCmpToRegistry)\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          statements.splice(update.nodeIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          statements[update.nodeIndex] = updateReactRegisteredComponent(\n            sys,\n            statements[update.nodeIndex],\n            update.updateRegisteredCmp\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"Khulnasoft\", \"khulnasoft\"],\n            importPath: \"@khulnasoft.com/react\",\n          });\n\n          sourceFile = ensureReactComponentImportStatements(\n            sys,\n            update,\n            sourceFile\n          );\n\n          if (cmpInfo?.acceptsChildren) {\n            sourceFile = ensureImport(sys, sourceFile, {\n              namedImports: [\"withChildren\"],\n              importPath: \"@khulnasoft.com/react\",\n            });\n          }\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered\n          );\n        }\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nasync function getReactRegisteredComponentSourceSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Khulnasoft registry must be \"CUSTOM_COMPONENTS\". Please update your Khulnasoft registry file: ${sys.registryPath}`\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseReactRegisteredComponentSdkGen2(\n      sys,\n      sourceFile,\n      elements[i]\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nfunction createReactRegisteredComponentSdkGen2(\n  sys: ReactDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        sys.ts.factory.createPropertyAssignment(\"component\", identifier),\n        ...(cmpInfo.acceptsChildren\n          ? [\n              sys.ts.factory.createPropertyAssignment(\n                \"canHaveChildren\",\n                sys.ts.factory.createTrue()\n              ),\n            ]\n          : []),\n      ],\n      true\n    ),\n    cmpInfo\n  );\n}\n\nfunction ensureReactComponentImportStatements(\n  sys: ReactDevToolsSys,\n  update: UpdateRegistry,\n  sourceFile: ts.SourceFile\n) {\n  const regCmp = update.addCmpToRegistry || update.updateRegisteredCmp;\n  if (regCmp) {\n    const importPath = regCmp.externalImportPath\n      ? regCmp.externalImportPath\n      : getImportPath(sys, sys.registryPath, regCmp.filePath);\n    if (regCmp.exportType === \"default\") {\n      sourceFile = ensureImport(sys, sourceFile, {\n        defaultImport: regCmp.importName,\n        importPath,\n      });\n    } else if (regCmp.exportType === \"named\") {\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [regCmp.importName],\n        importPath,\n      });\n    }\n  }\n\n  return sourceFile;\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { ReactDevToolsSys } from \".\";\nimport { reactComponentRegistry } from \"./react-registry\";\nimport { getImportPath } from \"../../../common/utils\";\nimport {\n  REACT_VITE_KHULNASOFT_KEY_ENV,\n  REACT_WEBPACK_KHULNASOFT_KEY_ENV,\n} from \"./react-api-key\";\n\nexport async function reactEnsureKhulnasoftSetup(sys: ReactDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await reactEnsureCounterComponent(sys, modifiedFiles);\n  await reactEnsureKhulnasoftRegistry(sys, modifiedFiles, counterCmpPath);\n\n  if (!(await sys.exists(sys.khulnasoftComponentPath))) {\n    const code = await sys.formatCode(\n      sys.khulnasoftComponentPath,\n      getReactAppKhulnasoftComponent(sys, sys.khulnasoftComponentPath)\n    );\n    await sys.writeFile(sys.khulnasoftComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.khulnasoftComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nexport async function reactEnsureFigmaImportSetup(sys: ReactDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  await reactEnsureKhulnasoftRegistry(sys, modifiedFiles);\n\n  const routeFileName = `figma-imports.${\n    sys.typescriptEnabled ? \"tsx\" : \"jsx\"\n  }`;\n  const routePath = sys.join(sys.componentsDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getReactAppKhulnasoftComponent(sys, routePath, \"figma-imports\")\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nfunction getReactAppKhulnasoftComponent(\n  sys: ReactDevToolsSys,\n  routePath: string,\n  modelName: string = \"page\"\n) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n  import React from \"react\";\n  import {\n      Content,\n      fetchOneEntry,\n      getKhulnasoftSearchParams,\n      isPreviewing,\n    ${ts ? \"type KhulnasoftContent,\" : \"\"}\n    } from \"@khulnasoft.com/sdk-react\";\n  import { CUSTOM_COMPONENTS } from ${JSON.stringify(\n    getImportPath(sys, routePath, sys.registryPath)\n  )};\n\n  // Khulnasoft Public API Key set in .env file\n  const KHULNASOFT_API_KEY = ${\n    sys.configType === \"vite\"\n      ? `import.meta.env.${REACT_VITE_KHULNASOFT_KEY_ENV};`\n      : `${REACT_WEBPACK_KHULNASOFT_KEY_ENV};`\n  }\n  const MODEL_NAME = \"${modelName}\";\n\n  export default function KhulnasoftPage() {\n  const [notFound, setNotFound] = React.useState(false);\n  const [content, setContent] = React.useState${\n    ts ? \"<KhulnasoftContent | null>\" : \"\"\n  }(null);\n\n  // get the page content from Khulnasoft\n  React.useEffect(() => {\n    fetchOneEntry({\n      model: MODEL_NAME,\n      apiKey: KHULNASOFT_API_KEY,\n      userAttributes: {\n        urlPath: window.location.pathname,\n      },\n      options: getKhulnasoftSearchParams(new URL(location.href).searchParams),\n    })\n      .then((content) => {\n        if (content) {\n          setContent(content);\n        }\n        setNotFound(!content);\n      })\n      .catch((err) => {\n        console.log(\"Oops: \", err);\n      });\n  }, []);\n\n  // If no page is found, return\n  // a 404 page from your code.\n  if (notFound && !isPreviewing()) {\n    return <div>404 Page Not Found</div>;\n  }\n\n  // return the page when found\n  return (\n  <>\n    {/* Render the Khulnasoft page */}\n    <Content\n      content={content}\n      model={MODEL_NAME}\n      apiKey={KHULNASOFT_API_KEY}\n      customComponents={CUSTOM_COMPONENTS}\n    />\n  </>\n  );\n}\n    `;\n  }\n\n  return `\nimport React from \"react\";\nimport { KhulnasoftComponent, khulnasoft, useIsPreviewing } from \"@khulnasoft.com/react\"; \nimport ${JSON.stringify(getImportPath(sys, routePath, sys.registryPath))};\n\n// Khulnasoft Public API Key set in .env file\n${\n  sys.configType === \"vite\"\n    ? `khulnasoft.init(import.meta.env.${REACT_VITE_KHULNASOFT_KEY_ENV}${\n        ts ? \"!\" : \"\"\n      })`\n    : `khulnasoft.init(\"${REACT_WEBPACK_KHULNASOFT_KEY_ENV}\")`\n}\n\nexport default function KhulnasoftPage() {\n  const isPreviewingInKhulnasoft = useIsPreviewing();\n  const [notFound, setNotFound] = React.useState(false);\n  const [content, setContent] = React.useState(null);\n\n  // get the page content from Khulnasoft\n  React.useEffect(() => {\n    async function fetchContent() {\n      const content = await khulnasoft\n        .get(\"${modelName}\", {\n          url: window.location.pathname,\n        })\n        .promise();\n\n      setContent(content);\n      setNotFound(!content);\n\n      // if the page title is found, \n      // set the document title\n      if (content?.data.title) {\n        document.title = content.data.title;\n      }\n    }\n    fetchContent();\n  }, []);\n  \n  if (content === null) {\n    return;\n  }\n  // If no page is found, return \n  // a 404 page from your code.\n  if (notFound && !isPreviewingInKhulnasoft) {\n    return <div>404 Page Not Found</div>;\n  }\n\n  // return the page when found\n  return (\n    <>\n      {/* Render the Khulnasoft page */}\n      <KhulnasoftComponent model=\"${modelName}\" content={content} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function reactEnsureKhulnasoftRegistry(\n  sys: ReactDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n  counterCmpPath?: string\n) {\n  if (!(await sys.exists(sys.registryPath))) {\n    if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n      const code = getKhulnasoftRegistryReactGen2(sys);\n      await sys.writeFile(sys.registryPath, code);\n      // else it is gen1\n    } else {\n      await sys.writeFile(sys.registryPath, \"\");\n    }\n\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!counterCmpPath) {\n    return;\n  }\n\n  const registry = await reactComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await reactComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false\n  );\n}\n\nasync function reactEnsureCounterComponent(\n  sys: ReactDevToolsSys,\n  modifiedFiles: ModifiedFile[]\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  if (!(await sys.exists(counterCmpPath))) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(counterStylesPath))) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: ReactDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\n\"use client\"\nimport React, { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nfunction getKhulnasoftRegistryReactGen2(sys: ReactDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@khulnasoft.com/sdk-react\";\n    \nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getKhulnasoftCache, setKhulnasoftCache } from \"../../../common/cache\";\nimport { getReactApiKey, setReactApiKey } from \"./react-api-key\";\nimport { reactComponentRegistry } from \"./react-registry\";\nimport {\n  reactEnsureKhulnasoftSetup,\n  reactEnsureFigmaImportSetup,\n} from \"./react-ensure-khulnasoft-setup\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"./react-khulnasoft-sdk-setup\";\nimport { findKhulnasoftRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createReactDevTools(sys: CreateDevToolsOptions) {\n  const reactSys = await createReactDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    khulnasoftPageOptions: async () => {\n      return {\n        templateContentId: \"2e36438034894a8abf279ea9e6d3596f\",\n        pathname: \"/khulnasoft-demo\",\n        title: \"Khulnasoft + React Demo Page\",\n      };\n    },\n    ensureKhulnasoftSetup: () => {\n      return reactEnsureKhulnasoftSetup(reactSys);\n    },\n    ensureFigmaImportPage: () => {\n      return reactEnsureFigmaImportSetup(reactSys);\n    },\n\n    getRegistryPath: () => {\n      return reactSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      reactSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false\n      );\n    },\n    unregisterComponent: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    getPublicApiKey: () => {\n      return getReactApiKey(reactSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setReactApiKey(reactSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@khulnasoft.com/dev-tools\" },\n          { name: \"@khulnasoft.com/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@khulnasoft.com/dev-tools\" },\n        { name: \"@khulnasoft.com/react\" },\n        { name: \"@khulnasoft.com/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getKhulnasoftCache(reactSys),\n    setCache: (cache) => setKhulnasoftCache(reactSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createReactDevToolsSys(sys: DevToolsSys) {\n  const reactConfigPath = await getReactConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const externalPackages: Record<string, string> = {};\n\n  const reactSys: ReactDevToolsSys = {\n    ...sys,\n    srcDir: null,\n    khulnasoftComponentPath: \"\",\n    componentsDir: \"\",\n    registryPath: \"\",\n    reactConfigPath,\n    typescriptEnabled,\n    configType: \"\",\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[\n        sys.join(rootDir, pkgName, \"index.ts\")\n      ] = `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1)\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1)\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (sys.sdkVersion) {\n    reactSys.sdkVersion = sys.sdkVersion;\n  } else {\n    reactSys.sdkVersion = await detectReactSdkVersion(reactSys);\n  }\n\n  if (reactConfigPath.includes(\"webpack.config\")) {\n    reactSys.configType = \"webpack\";\n  }\n\n  if (reactConfigPath.includes(\"vite.config\")) {\n    reactSys.configType = \"vite\";\n  }\n\n  if (await sys.exists(srcDir)) {\n    // src dir\n    reactSys.srcDir = srcDir;\n    reactSys.componentsDir = sys.join(srcDir, \"components\");\n\n    reactSys.registryPath = await findKhulnasoftRegistry(sys, srcDir);\n\n    reactSys.khulnasoftComponentPath = sys.join(\n      reactSys.srcDir,\n      `khulnasoft-page.${typescriptEnabled ? \"tsx\" : \"jsx\"}`\n    );\n  } else {\n    // no src dir\n    reactSys.componentsDir = sys.join(rootDir, \"components\");\n    reactSys.registryPath = await findKhulnasoftRegistry(sys, rootDir);\n    reactSys.khulnasoftComponentPath = sys.join(\n      rootDir,\n      `khulnasoft-page.${typescriptEnabled ? \"tsx\" : \"jsx\"}`\n    );\n  }\n\n  return reactSys;\n}\n\nasync function getReactConfigPath(sys: DevToolsSys) {\n  const configs = [\n    \"vite.config.ts\",\n    \"vite.config.js\",\n    \"webpack.config.js\",\n    \"webpack.config.ts\",\n  ];\n  for (const configName of configs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return configPath;\n    }\n  }\n\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n  throw new Error(\n    `Could not find React config file. Searched for ${configs.join(\n      \", \"\n    )} in \"${sys.getAppRootDir()}\".`\n  );\n}\n\nexport interface ReactDevToolsSys extends DevToolsSys {\n  srcDir: string | null;\n  componentsDir: string;\n  khulnasoftComponentPath: string;\n  registryPath: string;\n  reactConfigPath: string;\n  typescriptEnabled: boolean;\n  configType: \"webpack\" | \"vite\" | \"\";\n  addExternalPackage: (pkgName: string) => void;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport type ts from \"typescript\";\nimport { findVariableStatement } from \"../../../common/ast/utils\";\n\nexport async function getAngularApiKey(sys: DevToolsSys) {\n  const envFileNames = [\"environment.ts\"];\n\n  const env = await getEnvValue(sys, envFileNames, ANGULAR_KHULNASOFT_API_KEY_ENV);\n  return env;\n}\n\nexport async function setAngularApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getAngularApiKey(sys);\n\n  const modifiedType = await setEnvValue(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n\n  return updatedEnv;\n}\n\nexport async function getEnvValue(\n  sys: DevToolsSys,\n  envFileNames: string[],\n  envKey: string\n) {\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue: null,\n    file: \"\",\n  };\n\n  for (const envFileName of envFileNames) {\n    const envPath = sys.join(\n      sys.getAppRootDir(),\n      \"src\",\n      \"environments\",\n      envFileName\n    );\n    const value = await parseEnvFile(sys, envPath);\n\n    if (\n      typeof value === \"string\" &&\n      value.length > 0 &&\n      value !== \"YOUR_API_KEY\"\n    ) {\n      envInfo.envValue = value;\n      envInfo.file = envPath;\n      return envInfo;\n    }\n  }\n\n  envInfo.file = sys.join(\n    sys.getAppRootDir(),\n    \"src\",\n    \"environments\",\n    envFileNames[envFileNames.length - 1]\n  );\n  return envInfo;\n}\n\nexport async function parseEnvFile(sys: DevToolsSys, envPath: string) {\n  const envContent = await sys.readFile(envPath);\n  if (envContent) {\n    return parseEnvContent(sys, envContent);\n  }\n  return \"\";\n}\n\nexport function parseEnvContent(sys: DevToolsSys, envContent: string) {\n  const sourceFile = codeToSource(sys, envContent);\n  let extractedApiKey: string = \"\";\n\n  const variableName = \"environment\";\n\n  const s = findVariableStatement(sys, sourceFile, variableName);\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declaration = s.statement.declarationList.declarations[0];\n    const initializer = declaration.initializer;\n    if (initializer && sys.ts.isObjectLiteralExpression(initializer)) {\n      initializer.properties.forEach((prop) => {\n        if (\n          sys.ts.isPropertyAssignment(prop) &&\n          sys.ts.isIdentifier(prop.name) &&\n          prop.name.text === ANGULAR_KHULNASOFT_API_KEY_ENV &&\n          sys.ts.isStringLiteral(prop.initializer)\n        ) {\n          extractedApiKey = prop.initializer.text;\n        }\n      });\n    }\n  }\n\n  return extractedApiKey;\n}\n\nexport async function appendApiKey(\n  sys: DevToolsSys,\n  envContent: string,\n  key: string,\n  value: string\n): Promise<ts.VariableStatement | null> {\n  const sourceFile = codeToSource(sys, envContent);\n\n  const variableName = \"environment\";\n\n  const s = findVariableStatement(sys, sourceFile, variableName);\n\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declarationList = s.statement.declarationList;\n    const declaration = declarationList.declarations[0];\n\n    const initializer = declaration.initializer;\n\n    if (initializer && sys.ts.isObjectLiteralExpression(initializer)) {\n      const newProperty = sys.ts.factory.createPropertyAssignment(\n        sys.ts.factory.createIdentifier(key),\n        sys.ts.factory.createStringLiteral(value)\n      );\n      const newProperties = sys.ts.factory.createNodeArray([\n        ...initializer.properties,\n        newProperty,\n      ]);\n\n      const newInitializer = sys.ts.factory.updateObjectLiteralExpression(\n        initializer,\n        newProperties\n      );\n\n      const newDeclaration = sys.ts.factory.updateVariableDeclaration(\n        declaration,\n        declaration.name,\n        declaration.exclamationToken,\n        declaration.type,\n        newInitializer\n      );\n\n      const newDeclarationList = sys.ts.factory.updateVariableDeclarationList(\n        declarationList,\n        [newDeclaration]\n      );\n\n      const newVariableStatement = sys.ts.factory.updateVariableStatement(\n        s.statement,\n        s.statement.modifiers,\n        newDeclarationList\n      );\n\n      return newVariableStatement;\n    }\n    return null;\n  }\n  return null;\n}\n\nexport async function setEnvValue(\n  sys: DevToolsSys,\n  envPath: string,\n  key: string,\n  value: string\n): Promise<\"create\" | \"update\" | null> {\n  let envContent = await sys.readFile(envPath);\n\n  // check if we already have an existing file\n  if (envContent) {\n    // read the existing file\n    if (!envContent.includes(key)) {\n      // existing env does not have a khulnasoft api key\n      sys.debug(`Add \"${key}\" to ${envPath}`);\n      const updatedEnvNode = await appendApiKey(sys, envContent, key, value);\n      if (updatedEnvNode) {\n        const updatedEnvContent = sourceToCode(sys, updatedEnvNode);\n        const code = await sys.formatCode(envPath, updatedEnvContent);\n        await sys.writeFile(envPath, code);\n      }\n\n      return \"update\";\n    } else {\n      sys.debug(`\"${key}\" already set in ${envPath}`);\n    }\n  } else {\n    // create a new env file since it doesn't exist yet\n    sys.debug(`Creating new env file with \"${key}\" at ${envPath}`);\n\n    const envContent = `\n    // https://www.khulnasoft.com/c/docs/using-your-api-key\n    export const environment = {\n      production: false,\n      khulnasoftApiKey: \"${value}\",\n    };\n    `.trimStart();\n    const code = await sys.formatCode(envPath, envContent);\n    await sys.writeFile(envPath, code);\n    return \"create\";\n  }\n\n  return null;\n}\n\nexport const ANGULAR_KHULNASOFT_API_KEY_ENV = \"khulnasoftApiKey\";\n", "import type { AngularDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport type {\n  AppDependency,\n  ComponentInfo,\n  ComponentInput,\n  DevToolsSys,\n} from \"../../../types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getDisplayFilePath,\n  getComponentImportPath,\n} from \"../../../common/utils\";\nimport { createTsProgram, getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\nimport { mergeComponentInputs } from \"packages/dev-tools/common/ast/component-info\";\n\nexport async function getAngularSourceComponentsFromDir(\n  sys: AngularDevToolsSys,\n  tsProgram: ts.Program\n) {\n  const cmps: AngularComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n\n      if (shouldSkipFolder(sys, sourceFile.fileName)) {\n        return;\n      }\n\n      if (\n        fileName.startsWith(\".\") ||\n        fileName === \"node_modules\" ||\n        SKIP_APP_FILES.has(fileName)\n      ) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.registryPath) {\n        return;\n      }\n\n      const fileCmps = await getAngularComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile\n      );\n      cmps.push(...fileCmps);\n    })\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\nconst SKIP_APP_FILES: Set<string> = new Set([]);\n\nconst SKIP_FOLDERS = new Set([\"node_modules\"]);\n\nfunction shouldSkipFolder(sys: AngularDevToolsSys, fileName: string) {\n  for (const folder of SKIP_FOLDERS) {\n    if (sys.dirname(fileName).includes(folder)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport async function getAngularComponentsFromPath(\n  sys: DevToolsSys,\n  filePath: string\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\" || ext === \".jsx\" || ext === \".ts\" || ext === \".js\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getAngularComponentsFromCode(sys, filePath, code);\n    }\n  }\n  return null;\n}\n\nexport function getAngularComponentsFromCode(\n  sys: DevToolsSys,\n  filePath: string,\n  code: string\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getAngularComponentsFromSourceFile(sys, null, filePath, sourceFile);\n}\n\nexport async function getAngularComponentsFromSourceFile(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile\n) {\n  const fileCmps: AngularComponentSource[] = [];\n  filePath = sys.normalize(filePath);\n\n  const classStatements = sourceFile.statements.filter(\n    (s) => sys.ts.isClassDeclaration(s) && isComponentDecorator(sys, s)\n  );\n\n  const reExportedComponents = await getExportedAngularComponentSource(\n    sys,\n    typeChecker,\n    filePath,\n    sourceFile\n  );\n\n  const enumOptions = extractEnumOptions(sys, sourceFile);\n\n  await Promise.all(\n    classStatements.map(async (node) => {\n      const sCmps = await getAngularComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        node as ts.ClassDeclaration,\n        enumOptions\n      );\n      fileCmps.push(...sCmps);\n    })\n  );\n\n  fileCmps.push(...reExportedComponents);\n\n  return fileCmps;\n}\n\nexport async function parseAngularComponentSourceInputs(\n  sys: DevToolsSys,\n  srcCmp: AngularComponentSource,\n  tsProgram: ts.Program | null\n) {\n  if (srcCmp.node.fnNode) {\n    const { sourceFile, typeChecker } = await getTypeChecker(\n      sys,\n      srcCmp.cmpInfo.filePath,\n      tsProgram\n    );\n\n    const typedSrcCmps = await getAngularComponentsFromSourceFile(\n      sys,\n      typeChecker,\n      srcCmp.cmpInfo.filePath,\n      sourceFile\n    );\n    const typedSrcCmp = typedSrcCmps.find(\n      (t) => t.cmpInfo.id === srcCmp.cmpInfo.id\n    );\n\n    if (!typedSrcCmp) {\n      throw new Error(\n        `Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`\n      );\n    }\n\n    return typedSrcCmp.cmpInfo.inputs;\n\n    // TODO: get inputs using typechecker\n    // return parseComponentSourcePropsFromNode(\n    //   sys,\n    //   typeChecker,\n    //   typedSrcCmp.node.fnNode\n    // );\n  }\n  return [];\n}\n\nexport async function parseAngularAllComponentSourceInputs(\n  sys: DevToolsSys,\n  sourceComponents: AngularComponentSource[],\n  components: ComponentInfo[]\n) {\n  const hasUnregistered = components.some((c) => !c.isRegistered);\n  if (!hasUnregistered) {\n    return components;\n  }\n\n  const tsProgram = await createTsProgram(\n    sys,\n    components.map((c) => c.filePath)\n  );\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const componentsWithTypes = await Promise.all(\n    components\n      .filter((cmp) => {\n        if (cmp.name.endsWith(\"Page\")) {\n          return false;\n        }\n        if (cmp.name.endsWith(\"Module\")) {\n          return false;\n        }\n        if (cmp.name === \"AppComponent\") {\n          return false;\n        }\n        return true;\n      })\n      .map(async (cmp) => {\n        if (!cmp.isRegistered) {\n          const sourceFile = tsProgram.getSourceFile(cmp.filePath);\n          if (sourceFile) {\n            const typedSrcCmps = await getAngularComponentsFromSourceFile(\n              sys,\n              typeChecker,\n              cmp.filePath,\n              sourceFile\n            );\n            const typedSrcCmp = typedSrcCmps.find(\n              (t) => t.cmpInfo.id === cmp.id\n            );\n            if (typedSrcCmp) {\n              cmp.inputs = parseComponentSourcePropsFromNode(\n                sys,\n                typeChecker,\n                typedSrcCmp.node.fnNode\n              );\n              const sourceCmp = sourceComponents.find(\n                (s) => s.cmpInfo.id === cmp.id\n              );\n              if (sourceCmp) {\n                const sourceInputs = await parseAngularComponentSourceInputs(\n                  sys,\n                  sourceCmp,\n                  tsProgram\n                );\n                mergeComponentInputs(cmp, sourceInputs);\n              }\n            }\n          }\n        }\n        return cmp;\n      })\n  );\n\n  return componentsWithTypes;\n}\n\nasync function getAngularComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  node: ts.ClassDeclaration,\n  enumOptions: Record<string, string[]>\n): Promise<AngularComponentSource[]> {\n  const srcCmps: AngularComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  const cmpName = node.name?.text;\n  if (!cmpName) {\n    return srcCmps;\n  }\n  let isDefaultExport = false;\n\n  if (node.modifiers) {\n    isDefaultExport = node.modifiers.some(\n      (m) => m.kind === sys.ts.SyntaxKind.DefaultKeyword\n    );\n  }\n\n  const exportName = isDefaultExport ? \"default\" : cmpName;\n  const exportType = isDefaultExport ? \"default\" : \"named\";\n\n  const componentInputs: ComponentInput[] = [];\n\n  node.members.forEach((member) => {\n    if (sys.ts.isPropertyDeclaration(member)) {\n      const decorators = sys.ts.getDecorators(member);\n      if (decorators) {\n        decorators.forEach((decorator) => {\n          if (\n            isInputDecorator(sys, decorator) &&\n            sys.ts.isIdentifier(member.name)\n          ) {\n            let inputType = \"any\";\n            if (member.type && typeChecker) {\n              const typeNode = typeChecker.getTypeAtLocation(member.type);\n              const typeString = typeChecker.typeToString(typeNode);\n              inputType = typeString;\n            } else {\n              inputType = getTypeText(sys, member.type);\n            }\n\n            const input: any = {\n              name: member.name.text,\n              type: enumOptions[inputType] ? \"string\" : inputType,\n            };\n\n            if (enumOptions[inputType]) {\n              input.enum = enumOptions[inputType];\n            }\n\n            componentInputs.push(input);\n          }\n        });\n      }\n    }\n  });\n\n  srcCmps.push({\n    cmpInfo: {\n      id: await getComponentId(sys, filePath, cmpName),\n      displayFilePath: getDisplayFilePath(sys, filePath),\n      name: getComponentDisplayName(cmpName),\n      inputs: componentInputs,\n      exportName,\n      exportType,\n      importName: cmpName,\n      filePath,\n      relFilePath,\n      importPath,\n      meta: {\n        ...getComponentDecoratorInfo(sys, node),\n      },\n    },\n    node: {\n      name: cmpName,\n      fnNode: node,\n      deps: undefined,\n    },\n  });\n\n  return srcCmps;\n}\n\nasync function getExportedAngularComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile\n): Promise<AngularComponentSource[]> {\n  const srcCmps: AngularComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  for (const s of sourceFile.statements) {\n    if (\n      !(\n        sys.ts.isExportDeclaration(s) &&\n        s.exportClause &&\n        sys.ts.isNamedExports(s.exportClause)\n      )\n    ) {\n      continue;\n    }\n\n    for (const exportSpecifier of s.exportClause.elements) {\n      // const cmpName = exportSpecifier.name?.getText();\n\n      const cmpName = exportSpecifier.name?.text;\n      if (!cmpName) {\n        continue;\n      }\n      const exportName = cmpName;\n      const exportType = \"named\";\n\n      const componentInputs: ComponentInput[] = [];\n\n      // Resolve the type of the exported component\n      if (typeChecker) {\n        const symbol = typeChecker.getSymbolAtLocation(exportSpecifier.name);\n        if (symbol) {\n          const type = typeChecker.getDeclaredTypeOfSymbol(symbol);\n          const classMembers = typeChecker.getPropertiesOfType(type);\n          classMembers.forEach((member) => {\n            const declarations = member.getDeclarations();\n\n            if (declarations) {\n              declarations.forEach((declaration) => {\n                if (sys.ts.isPropertyDeclaration(declaration)) {\n                  const type = typeChecker.getTypeAtLocation(declaration);\n\n                  const input: any = {\n                    name: member.getName(),\n                    type: getTypeName(sys, typeChecker, type),\n                  };\n\n                  componentInputs.push(input);\n                }\n              });\n            }\n          });\n        }\n      }\n\n      const exportDeclaration =\n        sys.ts.isExportSpecifier(exportSpecifier) && exportSpecifier.parent\n          ? (exportSpecifier.parent.parent as ts.ExportDeclaration)\n          : undefined;\n      let modulePath;\n\n      if (exportDeclaration) {\n        const moduleSpecifier = exportDeclaration.moduleSpecifier;\n\n        if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n          const symbol = typeChecker?.getSymbolAtLocation(moduleSpecifier);\n          if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n            const declaration = symbol.declarations[0];\n            if (\n              !sys.ts.isSourceFile(declaration) ||\n              (sys.ts.isSourceFile(declaration) &&\n                declaration.fileName.includes(\"node_modules\"))\n            ) {\n              modulePath = moduleSpecifier.text;\n            }\n          }\n        }\n      }\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, cmpName, modulePath),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: getComponentDisplayName(cmpName),\n          inputs: componentInputs,\n          exportName,\n          exportType,\n          importName: cmpName,\n          filePath,\n          relFilePath,\n          importPath: modulePath ? modulePath : importPath,\n          externalImportPath: modulePath,\n        },\n        node: {\n          name: cmpName,\n          fnNode: exportSpecifier,\n          deps: undefined,\n        },\n      });\n    }\n  }\n\n  return srcCmps;\n}\n\nfunction isInputDecorator(sys: DevToolsSys, decorator: ts.Decorator): boolean {\n  return decoratorNameIs(sys, decorator, \"Input\");\n}\n\nfunction decoratorNameIs(\n  sys: DevToolsSys,\n  decorator: ts.Decorator,\n  name: string\n): boolean {\n  if (sys.ts.isCallExpression(decorator.expression)) {\n    const callExpression = decorator.expression;\n    if (sys.ts.isIdentifier(callExpression.expression)) {\n      return callExpression.expression?.text === name;\n    }\n  }\n  return false;\n}\n\nfunction isComponentDecorator(\n  sys: DevToolsSys,\n  node: ts.ClassDeclaration\n): boolean {\n  const decorators = sys.ts.getDecorators(node);\n  const hasComponentDecorator = decorators?.some(\n    (decorator) =>\n      sys.ts.isCallExpression(decorator.expression) &&\n      sys.ts.isIdentifier(decorator.expression.expression) &&\n      decorator.expression.expression.text === \"Component\"\n  );\n  return Boolean(hasComponentDecorator);\n}\n\nfunction getTypeText(sys: DevToolsSys, type: ts.TypeNode | undefined): string {\n  if (!type) {\n    return \"any\";\n  }\n  let inputType = \"any\";\n  switch (type.kind) {\n    case sys.ts.SyntaxKind.StringKeyword:\n      inputType = \"string\";\n      break;\n    case sys.ts.SyntaxKind.NumberKeyword:\n      inputType = \"number\";\n      break;\n    case sys.ts.SyntaxKind.BooleanKeyword:\n      inputType = \"boolean\";\n      break;\n    case sys.ts.SyntaxKind.TypeReference:\n      if (sys.ts.isTypeReferenceNode(type)) {\n        // inputType = type.typeName.getText();\n      }\n      break;\n  }\n  return inputType.includes(\"|\") ? \"string\" : inputType;\n}\n\nfunction extractEnumOptions(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile\n): Record<string, string[]> {\n  const enumOptions: Record<string, string[]> = {};\n\n  sys.ts.forEachChild(sourceFile, (node) => {\n    if (\n      sys.ts.isTypeAliasDeclaration(node) &&\n      sys.ts.isUnionTypeNode(node.type) &&\n      node.type.types.every(\n        (t) =>\n          sys.ts.isLiteralTypeNode(t) &&\n          sys.ts.isStringLiteral((t as ts.LiteralTypeNode).literal)\n      )\n    ) {\n      enumOptions[node.name.text] = node.type.types.map(\n        (t) => ((t as ts.LiteralTypeNode).literal as ts.StringLiteral).text\n      );\n    }\n  });\n\n  return enumOptions;\n}\n\nexport interface AngularComponentSourceNode {\n  name: string;\n  fnNode: ts.Node;\n  deps: AppDependency[] | undefined;\n}\n\nexport interface AngularComponentSource {\n  cmpInfo: ComponentInfo;\n  node: AngularComponentSourceNode;\n}\n\nfunction getTypeName(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  type: ts.Type\n): string {\n  let typeName = typeChecker.typeToString(type);\n\n  // Check if the type is 'any' and provide a more detailed type if available\n  if (typeName === \"any\") {\n    const symbol = type.getSymbol();\n    if (symbol) {\n      const declarations = symbol.getDeclarations();\n      if (declarations && declarations.length > 0) {\n        const declaration = declarations[0];\n        if (sys.ts.isVariableDeclaration(declaration)) {\n          // Try to get the type from variable declarations\n          const typeAnnotation = declaration.type;\n          if (typeAnnotation) {\n            typeName = typeChecker.typeToString(\n              typeChecker.getTypeAtLocation(typeAnnotation)\n            );\n          }\n        }\n      }\n    }\n  }\n\n  return typeName;\n}\n\nfunction getComponentDecoratorInfo(\n  sys: DevToolsSys,\n  node: ts.ClassDeclaration\n) {\n  const {\n    getDecorators,\n    isCallExpression,\n    isIdentifier,\n    isObjectLiteralExpression,\n    isPropertyAssignment,\n    isStringLiteral,\n    SyntaxKind,\n  } = sys.ts;\n\n  let selector, standalone;\n  const classDecorators = getDecorators(node);\n  classDecorators?.forEach((decorator) => {\n    if (decoratorNameIs(sys, decorator, \"Component\")) {\n      const { expression } = decorator;\n      if (isCallExpression(expression)) {\n        const [arg] = expression.arguments;\n        if (isObjectLiteralExpression(arg)) {\n          arg.properties.forEach((prop) => {\n            if (isPropertyAssignment(prop) && isIdentifier(prop.name)) {\n              if (\n                prop.name.escapedText === \"selector\" &&\n                isStringLiteral(prop.initializer)\n              ) {\n                selector = prop.initializer.text;\n              }\n              if (prop.name.escapedText === \"standalone\") {\n                standalone = prop.initializer.kind === SyntaxKind.TrueKeyword;\n              }\n            }\n          });\n        }\n      }\n    }\n  });\n\n  return { selector, standalone };\n}\n", "import type ts from \"typescript\";\nimport type { AngularDevToolsSys } from \".\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\n\nexport async function angularUpdateAppModule(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  cmpPath: string\n) {\n  const fileExtension = sys.typescriptEnabled ? \".ts\" : \".js\";\n  const fileName = `app.module${fileExtension}`;\n\n  const appModulePath = sys.join(sys.appDir, fileName);\n\n  const appModuleCode = await sys.readFile(appModulePath);\n\n  if (!appModuleCode) {\n    console.error(\n      `Unable to read app.module.${fileExtension} at ${appModulePath}`\n    );\n    return;\n  }\n\n  const updatedCode = await angularEnsureAppModuleImports(\n    sys,\n    appModulePath,\n    cmpName,\n    cmpPath,\n    appModuleCode\n  );\n\n  if (!updatedCode) {\n    console.error(\n      `Unable to update app.module.${fileExtension} at ${appModulePath}`\n    );\n    return;\n  }\n\n  await sys.writeFile(appModulePath, updatedCode);\n\n  return appModulePath;\n}\n\nexport async function angularEnsureAppModuleImports(\n  sys: AngularDevToolsSys,\n  appModulePath: string,\n  cmpName: string,\n  cmpPath: string,\n  code: string\n) {\n  let content = code;\n  let sourceFile = codeToSource(sys, code);\n\n  const cmpRelPath = getImportPath(sys, appModulePath, cmpPath);\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [cmpName],\n    importPath: cmpRelPath,\n  });\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [\"Content\"],\n    importPath: \"@khulnasoft.com/sdk-angular\",\n  });\n\n  const updatedStatements: ts.Statement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isClassDeclaration(s) && s.name?.text === \"AppModule\") {\n      const updatedClassDeclaration = modifyNgModuleDecorator(sys, cmpName, s);\n      updatedStatements.push(updatedClassDeclaration);\n    } else {\n      updatedStatements.push(s);\n    }\n  }\n\n  sourceFile = sys.ts.factory.updateSourceFile(sourceFile, updatedStatements);\n\n  content = sourceToCode(sys, sourceFile);\n  return content;\n}\n\nfunction modifyNgModuleDecorator(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  node: ts.ClassDeclaration\n): ts.ClassDeclaration {\n  const decorators = sys.ts.getDecorators(node);\n\n  if (decorators) {\n    for (const decorator of decorators) {\n      if (\n        sys.ts.isCallExpression(decorator.expression) &&\n        sys.ts.isIdentifier(decorator.expression.expression) &&\n        decorator.expression.expression.text === \"NgModule\"\n      ) {\n        const ngModuleArgs = decorator.expression.arguments;\n        if (\n          ngModuleArgs.length === 1 &&\n          sys.ts.isObjectLiteralExpression(ngModuleArgs[0])\n        ) {\n          let updatedObjectLiteral = appendArrayProperty(\n            sys,\n            ngModuleArgs[0],\n            \"declarations\",\n            cmpName\n          );\n\n          if (updatedObjectLiteral) {\n            const updatedObjectLiteralWithContent = appendArrayProperty(\n              sys,\n              updatedObjectLiteral,\n              \"imports\",\n              \"Content\"\n            );\n\n            if (updatedObjectLiteralWithContent) {\n              updatedObjectLiteral = updatedObjectLiteralWithContent;\n            }\n\n            if (updatedObjectLiteral) {\n              const updatedDecorator = sys.ts.factory.updateDecorator(\n                decorator,\n                sys.ts.factory.updateCallExpression(\n                  decorator.expression,\n                  decorator.expression.expression,\n                  decorator.expression.typeArguments,\n                  [updatedObjectLiteral]\n                )\n              );\n\n              const updatedDecorators = decorators.map((d) =>\n                d === decorator ? updatedDecorator : d\n              );\n\n              const modifiers = [\n                ...updatedDecorators,\n                ...(sys.ts.getModifiers(node) || []),\n              ];\n\n              return sys.ts.factory.updateClassDeclaration(\n                node,\n                modifiers,\n                node.name,\n                node.typeParameters,\n                node.heritageClauses,\n                node.members\n              );\n            }\n          }\n        }\n      }\n    }\n  }\n  return node;\n}\n\nfunction appendArrayProperty(\n  sys: AngularDevToolsSys,\n  objectExpression: ts.ObjectLiteralExpression,\n  propertyName: string,\n  itemName: string\n) {\n  const properties = [...objectExpression.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === propertyName;\n  });\n\n  if (pIndex > -1) {\n    const prop = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(prop) &&\n      prop.initializer &&\n      sys.ts.isArrayLiteralExpression(prop.initializer)\n    ) {\n      const updatedList = updateArrayItems(\n        sys,\n        prop.initializer as ts.ArrayLiteralExpression,\n        itemName\n      );\n      if (updatedList) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          prop,\n          prop.name,\n          updatedList\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(\n          objectExpression,\n          properties\n        );\n      }\n      // if item is already present in array\n      return null;\n    }\n    // if prop is present but it's not an array\n    return null;\n  }\n\n  // if prop is not present\n  const prop = updateArrayItems(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n    itemName\n  );\n  if (prop) {\n    return sys.ts.factory.updateObjectLiteralExpression(objectExpression, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(propertyName, prop),\n    ]);\n  }\n\n  return null;\n}\n\nfunction updateArrayItems(\n  sys: AngularDevToolsSys,\n  arrayExpression: ts.ArrayLiteralExpression,\n  itemToBeInserted: string\n) {\n  const hasItem = arrayExpression.elements.some((e) => {\n    if (sys.ts.isIdentifier(e)) {\n      return e.text === itemToBeInserted;\n    }\n    return false;\n  });\n\n  if (hasItem) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(arrayExpression, [\n    ...arrayExpression.elements,\n    sys.ts.factory.createIdentifier(itemToBeInserted),\n  ]);\n}\n", "import type { AngularDevToolsSys } from \".\";\n\nexport async function angularAddRoute(\n  sys: AngularDevToolsSys,\n  path: string,\n  componentName: string,\n  componentPath: string\n) {\n  try {\n    if (sys.magicast) {\n      const fileExtension = sys.typescriptEnabled ? \".ts\" : \".js\";\n      const fileName = `app.routes${fileExtension}`;\n\n      const appRoutesPath = sys.join(sys.appDir, fileName);\n      const mod = await sys.magicast.loadFile(appRoutesPath);\n      mod.exports.routes ||= [];\n      const routes = mod.exports.routes;\n\n      // Don't add the same route twice\n      if (routes.find((r: any) => r.path === path)) {\n        return;\n      }\n      const newEntry = sys.magicast.khulnasofts.raw(\"{}\");\n      newEntry.path = path;\n      newEntry.component = sys.magicast.khulnasofts.raw(componentName);\n      routes.push(newEntry);\n\n      // Don't add the same import twice\n      if (mod.imports.$items.find((i) => i.imported === componentName)) {\n        return;\n      }\n      mod.imports.$append({\n        imported: componentName,\n        from: componentPath,\n      });\n      await sys.magicast.writeFile(mod, appRoutesPath);\n    }\n  } catch (e) {\n    console.error(e);\n  }\n}\n", "import type { AngularDevToolsSys } from \".\";\nimport JSON5 from \"json5\";\n\nexport async function angularFixTsConfig(sys: AngularDevToolsSys) {\n  const tsConfigPath = sys.ts.findConfigFile(\n    sys.getAppRootDir(),\n    sys.existsSync\n  );\n  if (tsConfigPath) {\n    const tsConfigContent = await sys.readFile(tsConfigPath);\n    if (!tsConfigContent) {\n      return;\n    }\n    const tsConfig = JSON5.parse(tsConfigContent);\n    if (!tsConfig || typeof tsConfig !== \"object\" || Array.isArray(tsConfig)) {\n      return;\n    }\n    const compilerOptions = tsConfig.compilerOptions;\n    if (\n      !compilerOptions ||\n      typeof compilerOptions !== \"object\" ||\n      Array.isArray(compilerOptions)\n    ) {\n      return;\n    }\n    let paths = compilerOptions.paths;\n    if (!paths || typeof paths !== \"object\" || Array.isArray(paths)) {\n      compilerOptions.paths = {} as any;\n      paths = compilerOptions.paths;\n    }\n    Object.assign(compilerOptions.paths, {\n      \"~/*\": [\"./src/*\"],\n    });\n    await sys.writeFile(tsConfigPath, JSON.stringify(tsConfig, null, 2));\n  }\n}\n", "import type { ModifiedFile } from \"../../../types\";\nimport type { AngularDevToolsSys } from \".\";\nimport { angularComponentRegistry } from \"./angular-registry\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { ANGULAR_KHULNASOFT_API_KEY_ENV } from \"./angular-api-key\";\nimport { angularUpdateAppModule } from \"./angular-app-module-imports\";\nimport { angularAddRoute } from \"./angular-app-routes-update\";\nimport { angularFixTsConfig } from \"./angular-fix-tsconfig\";\n\nexport async function angularEnsureKhulnasoftSetup(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await angularEnsureCounterComponent(\n    sys,\n    modifiedFiles\n  );\n\n  modifiedFiles.push(...(await angularEnsureKhulnasoftRegistry(sys)));\n\n  await angularEnsureCounterRegistered(sys, counterCmpPath);\n\n  const khulnasoftCmpName = \"KhulnasoftPage\";\n\n  if (!(await sys.exists(sys.khulnasoftPageComponentPath))) {\n    const code = await sys.formatCode(\n      sys.khulnasoftPageComponentPath,\n      getAngularKhulnasoftComponent(\n        sys,\n        khulnasoftCmpName,\n        sys.khulnasoftPageComponentPath,\n        \"khulnasoft-page\",\n        \"page\",\n        true\n      )\n    );\n    await sys.writeFile(sys.khulnasoftPageComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.khulnasoftPageComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  // Update app.module file if it exists\n  if (sys.hasAppModule) {\n    //Update app module with Counter\n    await angularUpdateAppModule(sys, \"Counter\", counterCmpPath);\n\n    //Update app module with KhulnasoftPage\n    const appModulePath = await angularUpdateAppModule(\n      sys,\n      khulnasoftCmpName,\n      sys.khulnasoftPageComponentPath\n    );\n\n    if (appModulePath) {\n      modifiedFiles.push({ filePath: appModulePath, modifiedType: \"update\" });\n    }\n  }\n  await angularAddRoute(\n    sys,\n    \"**\",\n    khulnasoftCmpName,\n    `./components/khulnasoft-page.component`\n  );\n\n  return modifiedFiles;\n}\n\nexport async function angularEnsureFigmaImportSetup(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  modifiedFiles.push(...(await angularEnsureKhulnasoftRegistry(sys)));\n\n  const figmaImportsCmpName = \"FigmaImportsPage\";\n\n  const fileName = `figma-imports.component`;\n  const routePath = sys.join(\n    sys.componentsDir,\n    `${fileName}.${sys.typescriptEnabled ? \"ts\" : \"js\"}`\n  );\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getAngularKhulnasoftComponent(\n        sys,\n        figmaImportsCmpName,\n        routePath,\n        \"figma-imports\",\n        \"figma-imports\",\n        false\n      )\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  // Update app.module file if it exists\n  if (sys.hasAppModule) {\n    const appModulePath = await angularUpdateAppModule(\n      sys,\n      figmaImportsCmpName,\n      routePath\n    );\n\n    if (appModulePath) {\n      modifiedFiles.push({ filePath: appModulePath, modifiedType: \"update\" });\n    }\n  }\n  await angularAddRoute(\n    sys,\n    \"figma-imports\",\n    figmaImportsCmpName,\n    `./components/${fileName}`\n  );\n  await angularFixTsConfig(sys);\n  return modifiedFiles;\n}\n\nexport async function angularEnsureKhulnasoftRegistry(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, getAngularKhulnasoftRegistry(sys));\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nasync function angularEnsureCounterRegistered(\n  sys: AngularDevToolsSys,\n  counterCmpPath: string\n) {\n  const registry = await angularComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await angularComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false\n  );\n}\n\nfunction getAngularKhulnasoftComponent(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  cmpPath: string,\n  pageName: string,\n  modelName: string,\n  add404: boolean\n) {\n  const isStandAloneComponent = !sys.hasAppModule;\n  const registryImportPath = getImportPath(sys, cmpPath, sys.registryPath);\n  const envPath = sys.join(\n    sys.getAppRootDir(),\n    \"src\",\n    \"environments\",\n    \"environment.ts\"\n  );\n  const environmentImportPath = getImportPath(sys, cmpPath, envPath);\n\n  const template = add404\n    ? `    <ng-container *ngIf=\"content || isPreviewing; else notFound\">\n      <khulnasoft-content\n        [model]=\"model\"\n        [content]=\"content\"\n        [apiKey]=\"apiKey\"\n        [customComponents]=\"customComponents\"\n      ></khulnasoft-content>\n    </ng-container>\n\n    <ng-template #notFound>\n      <div>404 - Content not found</div>\n    </ng-template>`\n    : `    <khulnasoft-content\n      [model]=\"model\"\n      [content]=\"content\"\n      [apiKey]=\"apiKey\"\n      [customComponents]=\"customComponents\"\n    ></khulnasoft-content>`;\n\n  return `\nimport { Component, Input } from '@angular/core';\nimport { fetchOneEntry, type KhulnasoftContent${\n    add404 ? \", isPreviewing\" : \"\"\n  } } from '@khulnasoft.com/sdk-angular';\n${\n  isStandAloneComponent\n    ? \"import { Content } from '@khulnasoft.com/sdk-angular';\"\n    : \"\"\n}\n${\n  isStandAloneComponent ? \"import { CommonModule } from '@angular/common';\" : \"\"\n}\nimport { environment } from ${JSON.stringify(environmentImportPath)};\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n\n@Component({\n  selector: 'app-${pageName}',\n  ${isStandAloneComponent ? \"standalone: true,\" : \"\"}\n  ${isStandAloneComponent ? \"imports: [Content, CommonModule],\" : \"\"}\n  template: \\`\n${template}\n  \\`,\n})\nexport class ${cmpName} {\n  \n  ${add404 ? \"isPreviewing = isPreviewing();\\n\" : \"\"}\n  @Input() model = '${modelName}';\n\n  apiKey = environment.${ANGULAR_KHULNASOFT_API_KEY_ENV};\n  ${\n    sys.typescriptEnabled\n      ? `\n  content: KhulnasoftContent | null = null;\n`\n      : `\n  content = null;\n`\n  }\n\n  customComponents = CUSTOM_COMPONENTS;\n\n  async ngOnInit() {\n    const urlPath = window.location.pathname || '/';\n\n    const khulnasoftContent = await fetchOneEntry({\n      model: this.model,\n      apiKey: this.apiKey,\n      userAttributes: {\n        urlPath,\n      },\n    });\n\n    if (!khulnasoftContent) {\n      return;\n    }\n\n    this.content = khulnasoftContent;\n  }\n}\n\n  `.trimStart();\n}\n\nfunction getAngularKhulnasoftRegistry(sys: AngularDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@khulnasoft.com/sdk-angular\";\n    \nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n\nasync function angularEnsureCounterComponent(\n  sys: AngularDevToolsSys,\n  modifiedFiles: ModifiedFile[]\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"ts\" : \"js\";\n\n  const counterCmpPath = sys.join(\n    sys.componentsDir,\n    `counter.component.${ext}`\n  );\n\n  const hasCounterCmp = await sys.exists(counterCmpPath);\n\n  sys.debug(`angularEnsureCounterComponent, hasCounterCmp: ${hasCounterCmp}`);\n\n  const component = getCounterComponent(sys);\n\n  if (!hasCounterCmp) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: AngularDevToolsSys) {\n  const component = `\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'app-counter',\n  ${!sys.hasAppModule ? \"standalone: true,\" : \"\"}\n  template: \\`\n    <div class=\"counter\">\n      <button class=\"btn\" (click)=\"decrement()\">-</button>\n      <span class=\"count\">{{ count }}</span>\n      <button class=\"btn\" (click)=\"increment()\">+</button>\n    </div>\n  \\`,\n  styles: [\n    \\`\n      .counter {\n        margin: 32px auto;\n        display: flex;\n        width: 100%;\n        max-width: 190px;\n      }\n\n      .btn {\n        width: 42px;\n        font-size: 32px;\n        font-weight: bold;\n        background-color: #1c6bd1;\n        color: white;\n        border: none;\n        border-radius: 4px;\n        cursor: pointer;\n        line-height: 1.4;\n      }\n\n      .btn:hover {\n        opacity: 0.8;\n      }\n\n      .count {\n        flex: 1;\n        font-size: 42px;\n        text-align: center;\n        margin: 0 8px;\n      }\n    \\`,\n  ],\n})\nexport class Counter {\n  @Input() initialCount: number = 99;\n  count: number;\n\n  constructor() {\n    this.count = this.initialCount;\n  }\n\n  ngOnInit(): void {\n    this.count = this.initialCount;\n  }\n\n  increment(): void {\n    this.count += 1;\n  }\n\n  decrement(): void {\n    this.count -= 1;\n  }\n}\n\n`.trimStart();\n\n  return component;\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { AngularDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport { parseRegisteredComponentInfo } from \"../../../common/ast/component-info\";\nimport { angularEnsureKhulnasoftRegistry } from \"./angular-ensure-khulnasoft-setup\";\nimport { getAngularComponentsFromPath } from \"./angular-components\";\n\nexport async function parseAngularRegistryFromFile(sys: AngularDevToolsSys) {\n  await angularEnsureKhulnasoftRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseAngularRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseAngularRegistryFromCode(\n  sys: AngularDevToolsSys,\n  code: string\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseAngularRegisteredComponent(\n          sys,\n          sourceFile,\n          cmpElm\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      })\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseAngularRegisteredComponent(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n  };\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      } else if (sys.ts.isCallExpression(initializer)) {\n        const arg = initializer.arguments[0];\n        if (sys.ts.isIdentifier(arg)) {\n          identifierName = arg.text;\n        }\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      if (cmp.externalImportPath) {\n        cmp.exportName = identifierName;\n      } else {\n        const cmps = await getAngularComponentsFromPath(sys, i.filePath);\n        if (cmps && cmps.length > 0) {\n          if (cmps.length === 1) {\n            cmp.exportName = cmps[0].cmpInfo.exportName;\n          } else {\n            const namedCmp = cmps.find(\n              (c) => c.cmpInfo.exportName === identifierName\n            );\n            if (namedCmp) {\n              cmp.exportName = namedCmp.cmpInfo.exportName;\n            }\n          }\n        }\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../../types\";\nimport type { AngularDevToolsSys } from \"./index\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getAngularSourceComponentsFromDir } from \"./angular-components\";\nimport { getDisplayFilePath, getImportPath } from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseAngularRegisteredComponent,\n  parseAngularRegistryFromFile,\n} from \"./angular-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport {\n  parseAngularAllComponentSourceInputs,\n  parseAngularComponentSourceInputs,\n  type AngularComponentSource,\n} from \"./angular-components\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getAngularApiKey } from \"./angular-api-key\";\n\nexport async function angularComponentRegistry(\n  sys: AngularDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, angularApiKey] = await Promise.all([\n    getAngularSourceComponentsFromDir(sys, tsProgram),\n    parseAngularRegistryFromFile(sys),\n    getAngularApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: angularApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseAngularAllComponentSourceInputs(\n      sys,\n      srcCmps,\n      cmpRegistry.components\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n    ? [cmpId]\n    : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath))\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id\n      )!;\n      const sourceInputs = await parseAngularComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput\n      );\n\n      const {\n        elements,\n        elmIndex,\n        statementIndex,\n        statement,\n        variableDeclaration,\n      } = await getAngularRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n      if (update.addCmpToRegistry) {\n        // not already registered, append it\n        elements.push(\n          createAngularRegisteredComponent(sys, update.addCmpToRegistry)\n        );\n        madeChanges = true;\n      } else if (update.removeCmpFromRegistry) {\n        // already registered, remove it\n        elements.splice(elmIndex, 1);\n        madeChanges = true;\n      } else if (update.updateRegisteredCmp) {\n        // already registered, update component info\n        const element = updateComponentObjLiteralInfoProperties(\n          sys,\n          elements[elmIndex],\n          update.updateRegisteredCmp\n        );\n        elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n          element,\n          [\n            createAngularComponentPropertyAssignment(\n              sys,\n              update.updateRegisteredCmp\n            ),\n            ...element.properties.slice(1),\n          ]\n        );\n        madeChanges = true;\n      }\n\n      if (madeChanges && writeRegistry) {\n        const statements = [...sourceFile.statements];\n        statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n          statement,\n          statement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            statement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                variableDeclaration,\n                variableDeclaration.name,\n                variableDeclaration.exclamationToken,\n                variableDeclaration.type,\n                sys.ts.factory.createArrayLiteralExpression(\n                  normalizeRegisteredArrayElements(sys, elements)\n                )\n              ),\n            ]\n          )\n        );\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        if (cmpInfo.exportType === \"named\") {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [cmpInfo.importName],\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        } else {\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: cmpInfo.importName,\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        }\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [\"RegisteredComponent\"],\n          importPath: \"@khulnasoft.com/sdk-angular\",\n          isTypeOnly: true,\n        });\n\n        sourceFile = ensureArrayStatement(sys, sourceFile, {\n          variableName: \"CUSTOM_COMPONENTS\",\n          arrayType: \"RegisteredComponent\",\n        });\n\n        cmpRegistry.components = update.components;\n        registeredComponents = update.components.filter((c) => c.isRegistered);\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createAngularComponentPropertyAssignment(\n  sys: AngularDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  return sys.ts.factory.createPropertyAssignment(\"component\", identifier);\n}\n\nfunction createAngularRegisteredComponent(\n  sys: AngularDevToolsSys,\n  cmpInfo: ComponentInfo\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [createAngularComponentPropertyAssignment(sys, cmpInfo)],\n      true\n    ),\n    cmpInfo\n  );\n}\n\nasync function getAngularRegisteredComponentSource(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: AngularComponentSource\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Khulnasoft registry must be \"CUSTOM_COMPONENTS\". Please update your Khulnasoft registry file: ${sys.registryPath}`\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseAngularRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i]\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getKhulnasoftCache, setKhulnasoftCache } from \"../../../common/cache\";\nimport { getAngularApiKey, setAngularApiKey } from \"./angular-api-key\";\nimport { angularComponentRegistry } from \"./angular-registry\";\nimport {\n  angularEnsureKhulnasoftSetup,\n  angularEnsureFigmaImportSetup,\n} from \"./angular-ensure-khulnasoft-setup\";\nimport { findKhulnasoftRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createAngularDevTools(sys: CreateDevToolsOptions) {\n  const angularSys = await createAngularDevToolsSys(sys);\n\n  const externalPackages: Record<string, string> = {};\n  const devTools: DevToolsAdapter = {\n    khulnasoftPageOptions: async () => {\n      return {\n        templateContentId: \"f0b8016ac92e474699293211a268ebaa\",\n        pathname: \"/khulnasoft-demo\",\n        title: \"Khulnasoft + Angular Demo Page\",\n      };\n    },\n    ensureKhulnasoftSetup: () => {\n      return angularEnsureKhulnasoftSetup(angularSys);\n    },\n    ensureFigmaImportPage: () => {\n      return angularEnsureFigmaImportSetup(angularSys);\n    },\n\n    getRegistryPath: () => {\n      return angularSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes\n      );\n    },\n    addExternalPackage: async (pkgName: string) => {\n      if (!externalPackages[pkgName]) {\n        externalPackages[pkgName] = `export * from \"${pkgName}\";`;\n      }\n    },\n    loadComponent: async (opts) => {\n      const r = await angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false\n      );\n    },\n    unregisterComponent: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false\n      );\n    },\n    getPublicApiKey: () => {\n      return getAngularApiKey(angularSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setAngularApiKey(angularSys, opts.publicApiKey);\n    },\n    getDependencies: (_opts) => {\n      return [\n        { name: \"@khulnasoft.com/dev-tools\" },\n        { name: \"@khulnasoft.com/sdk-angular\" },\n        { name: \"concurrently\" }, // For running dev tools server and angular dev server concurrently\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"khulnasoft-dev\";\n    },\n    getCache: () => getKhulnasoftCache(angularSys),\n    setCache: (cache) => setKhulnasoftCache(angularSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createAngularDevToolsSys(sys: DevToolsSys) {\n  const angularConfigPath = await getAngularConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const appDir = sys.join(srcDir, \"app\");\n\n  const registryPath = await findKhulnasoftRegistry(sys, appDir);\n\n  const angularSys: AngularDevToolsSys = {\n    ...sys,\n    srcDir: \"\",\n    appDir: \"\",\n    componentsDir: \"\",\n    registryPath,\n    angularConfigPath,\n    typescriptEnabled,\n    khulnasoftPageComponentPath: \"\",\n    hasAppModule: false, // If app.module is not present components will be standalone\n  };\n\n  if (!(await sys.exists(srcDir))) {\n    throw new Error(\n      `Could not find src directory. Searched for src in \"${sys.getAppRootDir()}\".`\n    );\n  }\n\n  angularSys.srcDir = srcDir;\n  angularSys.appDir = appDir;\n  angularSys.componentsDir = sys.join(angularSys.appDir, \"components\");\n\n  angularSys.khulnasoftPageComponentPath = sys.join(\n    angularSys.componentsDir,\n    `khulnasoft-page.component.${typescriptEnabled ? \"ts\" : \"js\"}`\n  );\n\n  const appModuleFileName = `app.module.${typescriptEnabled ? \"ts\" : \"js\"}`;\n  const appModulePath = sys.join(angularSys.appDir, appModuleFileName);\n\n  if (await sys.exists(appModulePath)) {\n    angularSys.hasAppModule = true;\n  }\n\n  return angularSys;\n}\n\nasync function getAngularConfigPath(sys: DevToolsSys) {\n  const configPath = sys.join(sys.getAppRootDir(), \"angular.json\");\n  if (await sys.exists(configPath)) {\n    return configPath;\n  }\n\n  const projectPath = sys.join(sys.getAppRootDir(), \"project.json\");\n  if (await sys.exists(projectPath)) {\n    return projectPath;\n  }\n\n  throw new Error(\n    `Could not find Angular config file. Searched for angular.json & project.json in \"${sys.getAppRootDir()}\".`\n  );\n}\n\nexport interface AngularDevToolsSys extends DevToolsSys {\n  appDir: string;\n  srcDir: string;\n  componentsDir: string;\n  registryPath: string;\n  angularConfigPath: string;\n  typescriptEnabled: boolean;\n  khulnasoftPageComponentPath: string;\n  hasAppModule: boolean;\n}\n", "import type {\n  DevToolsAdapter,\n  DevToolsSys,\n  ExportedRegistry,\n  MinimalComponentInfo,\n} from \"../types\";\nimport { clone, normalizePathSlash } from \"../common/utils\";\nimport { compress, decompress, type Compressed } from \"compress-json\";\n\nexport async function exportRegistry(\n  sys: DevToolsSys,\n  devTools: DevToolsAdapter\n) {\n  const registry = await devTools.getRegistry();\n\n  const exportedRegistry: ExportedRegistry = {\n    components: registry.components\n      .filter((c) => c.isRegistered)\n      .map((c) => {\n        const minimal: MinimalComponentInfo = {\n          filePath: normalizePathSlash(\n            sys.relative(sys.getAppRootDir(), c.filePath)\n          ),\n          name: c.name,\n          image: c.image,\n          description: c.description,\n          exportName: c.exportName,\n          inputs: clone(c.inputs),\n        };\n        return clone(minimal);\n      }),\n    version: 1,\n  };\n\n  sys.debug(\n    `exporting registry components:`,\n    exportedRegistry.components.length\n  );\n\n  const compressed = compress(exportedRegistry);\n\n  return btoa(JSON.stringify(compressed));\n}\n\nexport async function importRegistry(\n  sys: DevToolsSys,\n  devTools: DevToolsAdapter,\n  registryToImport: string\n) {\n  if (typeof registryToImport !== \"string\") {\n    throw new Error(`Invalid registry to import`);\n  }\n\n  const registry = await devTools.getRegistry();\n\n  const compressed = JSON.parse(atob(registryToImport)) as Compressed;\n\n  const importedRegistry = decompress(compressed) as ExportedRegistry;\n\n  let updatedRegistry = clone(registry);\n\n  sys.debug(\n    `importing registry components:`,\n    importedRegistry.components.length\n  );\n\n  for (const cmpToRegister of importedRegistry.components) {\n    const filePath = normalizePathSlash(sys.normalize(cmpToRegister.filePath));\n    const cmp = registry.components.find(\n      (c) =>\n        normalizePathSlash(c.filePath).endsWith(filePath) &&\n        c.exportName === cmpToRegister.exportName\n    );\n    if (!cmp) {\n      console.error(\n        `Could not find component to register: ${cmpToRegister.filePath}, ${cmpToRegister.exportName}`\n      );\n      continue;\n    }\n\n    sys.debug(`register (${cmp.id})`, cmp.filePath);\n\n    await devTools.registerComponent({\n      cmpId: cmp.id,\n    });\n\n    for (const input of cmpToRegister.inputs) {\n      sys.debug(`set input (${cmp.id})`);\n      await devTools.setRegisteredComponentInput({\n        cmpId: cmp.id,\n        name: input.name,\n        type: input.type,\n        required: input.required,\n        defaultValue: input.defaultValue,\n        friendlyName: input.friendlyName,\n        helperText: input.helperText,\n      });\n    }\n\n    sys.debug(`set input (${cmp.id}) info`);\n    const r = await devTools.setRegisteredComponentInfo({\n      cmpId: cmp.id,\n      name: cmpToRegister.name,\n      image: cmpToRegister.image,\n      description: cmpToRegister.description,\n    });\n\n    updatedRegistry = clone(r);\n  }\n\n  return updatedRegistry;\n}\n", "import type { SDKFrameworks, SDKVersionInfo } from \"../../types\";\n\nimport { SDK_VERSIONS } from \"../../types\";\n\nexport const SUPPORTED_FRAMEWORKS = {\n  react: \"react\",\n  remix: \"remix\",\n  angular: \"angular\",\n  next: \"next\",\n  qwik: \"qwik\",\n};\n\nconst SDK_PER_FRAMEWORK: SDKFrameworks = {\n  [SUPPORTED_FRAMEWORKS.react]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: true,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: false,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.remix]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: false,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.angular]: [\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.next]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: true,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: false,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.qwik]: [\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n};\n\nexport function getSDKDetailsForFramework(framework: string): SDKVersionInfo[] {\n  return SDK_PER_FRAMEWORK[framework];\n}\n", "import type { DevToolsSys } from \"../types\";\n\nexport interface Package {\n  name: string;\n  subPackages: string[];\n}\n\nexport type DependencyStructure = Package[];\n\nexport async function findAllDependencies(\n  sys: DevToolsSys,\n  rootDir: string\n): Promise<DependencyStructure> {\n  const packages: DependencyStructure = [];\n  const processedPackages: Set<string> = new Set();\n\n  async function processPackage(packageDir: string): Promise<Package | null> {\n    const packageJsonPath = sys.join(packageDir, \"package.json\");\n\n    try {\n      const packageJsonContent = await sys.readFile(packageJsonPath);\n      if (packageJsonContent === null) {\n        throw new Error(`Failed to read package.json at ${packageJsonPath}`);\n      }\n      const packageJson = JSON.parse(packageJsonContent);\n\n      if (processedPackages.has(packageJson.name)) {\n        return null; // Skip if already processed\n      }\n      processedPackages.add(packageJson.name);\n\n      const currentPackage: Package = {\n        name: packageJson.name,\n        subPackages: [],\n      };\n\n      // Check for subpackages within the current package\n      const packageContents = await sys.readdir(packageDir);\n      for (const item of packageContents) {\n        if (\n          item !== \"node_modules\" &&\n          (await sys.stat(sys.join(packageDir, item))).isDirectory()\n        ) {\n          currentPackage.subPackages.push(item);\n        }\n      }\n\n      packages.push(currentPackage);\n      return currentPackage;\n    } catch (error) {\n      console.error(`Error reading package.json at ${packageDir}:`, error);\n      return null;\n    }\n  }\n\n  // Process main package dependencies\n  const mainPackageJsonPath = sys.join(rootDir, \"package.json\");\n  const mainPackageJsonContent = await sys.readFile(mainPackageJsonPath);\n  if (mainPackageJsonContent !== null) {\n    const mainPackageJson = JSON.parse(mainPackageJsonContent);\n    const allDependencies = {\n      ...mainPackageJson.dependencies,\n      ...mainPackageJson.devDependencies,\n    };\n\n    for (const depName of Object.keys(allDependencies)) {\n      const depPath = sys.join(rootDir, \"node_modules\", depName);\n      await processPackage(depPath);\n    }\n\n    // Process workspaces if present\n    if (mainPackageJson.workspaces) {\n      for (const workspace of mainPackageJson.workspaces) {\n        const workspacePaths = await sys.readdir(sys.join(rootDir, workspace));\n        for (const workspacePath of workspacePaths) {\n          const fullWorkspacePath = sys.join(rootDir, workspace, workspacePath);\n          await processPackage(fullWorkspacePath);\n        }\n      }\n    }\n  }\n\n  return packages;\n}\n", "import type { CreateDevToolsOptions, DevTools } from \"../types\";\nimport { detectFrameworks, detectTurbopack } from \"./detect-frameworks\";\nimport { createNextDevTools } from \"./adapters/next\";\nimport { createQwikCityDevTools } from \"./adapters/qwik-city\";\nimport { createRemixDevTools } from \"./adapters/remix\";\nimport { createReactDevTools } from \"./adapters/react\";\nimport { createAngularDevTools } from \"./adapters/angular\";\nimport { exportRegistry, importRegistry } from \"./import-export-registry\";\nimport { SUPPORTED_FRAMEWORKS } from \"../common/khulnasoft/khulnasoft-sdks\";\nimport { findAllDependencies } from \"./find-dependencies\";\n\nconst FRAMEWORK_ADAPTERS: { [name: string]: typeof createQwikCityDevTools } = {\n  \"@khulnasoft.com/qwik-city\": createQwikCityDevTools,\n  next: createNextDevTools,\n  \"@remix-run/react\": createRemixDevTools,\n  react: createReactDevTools,\n  \"@angular/core\": createAngularDevTools,\n};\n\nconst FRAMEWORK_FRIENDLY_NAMES: { [name: string]: string } = {\n  \"@khulnasoft.com/qwik-city\": SUPPORTED_FRAMEWORKS.qwik,\n  next: SUPPORTED_FRAMEWORKS.next,\n  \"@remix-run/react\": SUPPORTED_FRAMEWORKS.remix,\n  react: SUPPORTED_FRAMEWORKS.react,\n  \"@angular/core\": SUPPORTED_FRAMEWORKS.angular,\n};\n\nexport async function createDevTools(\n  opts: CreateDevToolsOptions\n): Promise<DevTools> {\n  if (!opts.ts) {\n    throw new Error(\n      \"createDevTools() requires a TypeScript instance passed to the 'ts' option\"\n    );\n  }\n\n  if (!opts.frameworks || opts.frameworks.length === 0) {\n    opts.frameworks = await detectFrameworks(opts);\n  }\n  if (opts.frameworks.length === 0) {\n    throw new Error(\n      `Supported Devtools framework for not found within ${opts.getAppRootDir()}`\n    );\n  }\n\n  for (const framework of opts.frameworks) {\n    const createDevTools = FRAMEWORK_ADAPTERS[framework.name];\n    if (createDevTools) {\n      if (framework.name === \"next\") {\n        const isTurbopack = await detectTurbopack(opts);\n        if (isTurbopack) {\n          throw new Error(\n            `Turbopack does not support the Khulnasoft.com devtools cli. Please disable Turbopack or manually integrate Khulnasoft.com into your Next.js project.`\n          );\n        }\n      }\n      const devToolsAdapter = await createDevTools(opts);\n      const devTools: DevTools = {\n        ...devToolsAdapter,\n        exportRegistry: () => {\n          return exportRegistry(opts, devToolsAdapter);\n        },\n        importRegistry: (exportedRegistry) => {\n          return importRegistry(opts, devToolsAdapter, exportedRegistry);\n        },\n        framework: FRAMEWORK_FRIENDLY_NAMES[framework.name],\n        findAllDependencies: async () => {\n          return await findAllDependencies(opts, opts.getRepoRootDir());\n        },\n      };\n      return devTools;\n    }\n  }\n\n  throw new Error(\n    `Devtools framework not found for ${opts.getAppRootDir()}, ${JSON.stringify(\n      opts.frameworks,\n      null,\n      2\n    )}`\n  );\n}\n", "import type { BuildToolConfig, DevToolsSys } from \"../types\";\nimport { detectFrameworks } from \"./detect-frameworks\";\nimport { normalizeLineBreaks } from \"../common/ast/normalize-statements\";\nimport { nextEnsureConfigPlugin } from \"./adapters/next/next-ensure-config-plugin\";\nimport { remixEnsureConfigPlugin } from \"./adapters/remix/remix-ensure-config-plugin\";\nimport { viteEnsureConfigPlugin } from \"./adapters/vite/vite-ensure-config-plugin\";\nimport { webpackEnsureConfigPlugin } from \"./adapters/webpack/webpack-ensure-config-plugin\";\nimport { angularEnsureConfigPlugin } from \"./adapters/angular/angular-ensure-config-plugin\";\n\nconst BUILD_TOOLS = [\n  {\n    id: \"next\",\n    configFileNames: [\"next.config.ts\", \"next.config.js\", \"next.config.mjs\"],\n    ensureConfigPlugin: nextEnsureConfigPlugin,\n  },\n  {\n    id: \"vite\",\n    configFileNames: [\"vite.config.ts\", \"vite.config.js\"],\n    ensureConfigPlugin: viteEnsureConfigPlugin,\n  },\n  {\n    id: \"remix\",\n    configFileNames: [\"remix.config.ts\", \"remix.config.js\"],\n    ensureConfigPlugin: remixEnsureConfigPlugin,\n  },\n  {\n    id: \"webpack\",\n    configFileNames: [\"webpack.config.ts\", \"webpack.config.js\"],\n    ensureConfigPlugin: webpackEnsureConfigPlugin,\n  },\n  {\n    id: \"angular\",\n    configFileNames: [\"angular.json\", \"project.json\"],\n    ensureConfigPlugin: angularEnsureConfigPlugin,\n  },\n];\n\nexport async function findBuildToolConfig(sys: DevToolsSys) {\n  const fsRoot = sys.resolve(\"/\");\n\n  for (const b of BUILD_TOOLS) {\n    for (const fileName of b.configFileNames) {\n      let dir = sys.getAppRootDir(); // Instead of using sys.cwd() use the root dir\n      for (let i = 0; i < 10; i++) {\n        try {\n          const filePath = sys.join(dir, fileName);\n          const content = sys.readFileSync(filePath);\n          if (typeof content === \"string\") {\n            const buildToolConfig: BuildToolConfig = {\n              id: b.id,\n              filePath,\n              content,\n            };\n            return buildToolConfig;\n          }\n\n          if (dir === fsRoot) {\n            break;\n          }\n          dir = sys.dirname(dir);\n        } catch (e: any) {\n          const message = e?.message ?? \"\";\n          // Check next config file if current one doesn't exist\n          if (message.includes(\"Invalid path\")) {\n            break;\n          } else {\n            throw e;\n          }\n        }\n      }\n    }\n  }\n\n  const frameworks = await detectFrameworks(sys);\n\n  if (frameworks.some((f) => f.name === \"next\")) {\n    const filePath = sys.join(sys.getAppRootDir(), `next.config.js`);\n    await sys.writeFile(filePath, DEFAULT_NEXT_CONFIG);\n    const nextConfig: BuildToolConfig = {\n      id: \"next\",\n      filePath,\n      content: DEFAULT_NEXT_CONFIG,\n    };\n    return nextConfig;\n  }\n\n  return null;\n}\n\nexport async function ensureConfigPlugin(sys: DevToolsSys) {\n  const config = await findBuildToolConfig(sys);\n  if (!config) {\n    throw new Error(\n      `Unable to find config file, such as next.config.js or vite.config.js.`\n    );\n  }\n\n  const b = BUILD_TOOLS.find((b) => b.id === config!.id)!;\n\n  const result = await b.ensureConfigPlugin(\n    sys,\n    config.filePath,\n    config.content\n  );\n\n  if (result.hasContentUpdates) {\n    result.content = normalizeLineBreaks(result.content);\n    result.content = await sys.formatCode(result.filePath, result.content);\n    await sys.writeFile(config.filePath, result.content);\n  }\n\n  return result;\n}\n\nconst DEFAULT_NEXT_CONFIG = `\n/** @type {import('next').NextConfig} */\nconst nextConfig = {\n}\n \nmodule.exports = nextConfig\n`.trimStart();\n", "import { createDevTools } from \"../core\";\nimport type {\n  ComponentInfo,\n  ComponentInput,\n  ComponentRegistry,\n  DevTools,\n  DevToolsSys,\n  ExportType,\n} from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport prompts from \"prompts\";\nimport fs from \"fs\";\nimport { createEmphasize, common } from \"emphasize\";\nimport readline from \"readline\";\nimport {\n  intro,\n  text,\n  spinner,\n  outro,\n  isCancel,\n  cancel,\n  log,\n  confirm,\n  select,\n  multiselect,\n} from \"@clack/prompts\";\nimport { prettierFormat } from \"./prettier\";\nimport { getCredentials } from \"./credentials\";\nimport {\n  bold,\n  bgCyan,\n  cyan,\n  dim,\n  white,\n  yellow,\n  bgGreen,\n  magenta,\n  green,\n  bgMagenta,\n  bgBlack,\n  underline,\n} from \"picocolors\";\nimport { isAbsolute } from \"path\";\nimport { printHelp } from \"./help\";\nimport * as Sentry from \"@sentry/node\";\nimport { getKhulnasoftSpaceKv } from \"./kv\";\nimport { distance } from \"fastest-levenshtein\";\nimport { exit } from \"./exit\";\nimport { apiAirV2Host } from \"./constants\";\nimport {\n  findAllMappingFiles,\n  findMappingsFromFiles,\n  setPublicKey,\n} from \"./figma-publish\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\n\nexport const runFigmaGenerate = async (sys: DevToolsSys, args: CLIArgs) => {\n  const figmaUrls = args._.slice(2);\n  if (!figmaUrls.length) {\n    cancel(\n      'No Figma URL provided, use:\\n  npx khulnasoft.com figma generate \"https://...\"'\n    );\n    printHelp();\n    return await exit(1);\n  }\n\n  console.log(\"\");\n  intro(bgMagenta(bold(white(\" figma generate \"))) + `  ` + dim(VERSION));\n\n  log.message(\n    dim(`This command will help you create new \".mapper.tsx\" files to connect Figma components to your code components.\nCheck out `) +\n      bold(cyan(\"https://www.khulnasoft.com/c/docs/cli-mapping\")) +\n      dim(\" for more details.\")\n  );\n\n  const {\n    figmaAuth,\n    khulnasoftPublicKey: spaceId,\n    khulnasoftPrivateKey: privateKey,\n    userId,\n  } = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    figmaAuth: true,\n    khulnasoftPublicKey: true,\n    khulnasoftPrivateKey: true,\n  });\n\n  if (!privateKey || !spaceId) {\n    cancel(\"Missing khulnasoft.com credentials\");\n    return await exit(1);\n  }\n  const accessToken = figmaAuth?.access_token;\n  if (!accessToken) {\n    cancel(\"Figma Auth failed, try again.\");\n    return await exit(1);\n  }\n\n  track(\"figma generate started\", {\n    spaceId,\n  });\n  const highlight = createEmphasize(common);\n\n  let s = spinner();\n  s.start(\"Loading local repo\");\n\n  let devTools: DevTools | undefined;\n  try {\n    devTools = await createDevTools(sys);\n    s.stop(`Local repo loaded`);\n  } catch (e) {\n    s.stop(`Repo's framework is not supported`);\n  }\n\n  let mappingPath: string | undefined;\n  let filePath: string | undefined;\n\n  s = spinner();\n  s.start(\"Gathering Figma component info\");\n  let importData = await getFigmaNodeDataFromURLs(\n    figmaAuth,\n    {\n      privateKey,\n      spaceId,\n    },\n    figmaUrls\n  );\n  let registry = await devTools?.getRegistry({\n    readAllInputTypes: true,\n  });\n\n  s.stop(`Figma component info loaded`);\n\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  const { figmaKhulnasoftLinks } = await findMappingsFromFiles({\n    figmaAuth,\n    force: true,\n    print: false,\n    mappingFiles,\n    sys,\n  });\n\n  // select components to map, skip components already in registry by default but allow to override\n  if (importData.length > 1) {\n    const selectedComponents = await multiselect({\n      message: `Pick which ${magenta(\n        \"\u2756\"\n      )} Figma components you want to connect to code:`,\n      required: true,\n      options: importData.map(([, c]) => ({\n        label: `${c.name}${\n          figmaKhulnasoftLinks.some((link) => link.figmaKey === c.key)\n            ? dim(\" (already mapped)\")\n            : \"\"\n        }`,\n        value: c.key,\n      })),\n      initialValues: importData\n        .map(([, c]) => c.key)\n        .filter((key) => {\n          return !figmaKhulnasoftLinks.some((link) => link.figmaKey === key);\n        }),\n    });\n\n    if (isCancel(selectedComponents)) {\n      cancel(\"Mapping not saved, goodbye!\");\n      return await exit(1);\n    }\n    importData = importData.filter(([, c]) =>\n      selectedComponents.includes(c.key)\n    );\n  }\n\n  const savedFiled: string[] = [];\n  for (let i = 0; i < importData.length; i++) {\n    const [figmaUrl, figmaComponentInfo] = importData[i];\n\n    if (i > 0) {\n      log.info(`Mapped ${i} / ${importData.length} components:\\n\n${importData\n  .map(([, c], index) => {\n    if (i > index) {\n      if (c.documentName === \"-\") {\n        return dim(` \u2756 ${c.name}`) + \" \" + yellow(\"(skipped)\");\n      } else {\n        return green(` \u2714 ${c.name} \u2192 <${c.documentName} />`);\n      }\n    } else if (i === index) {\n      return underline(` \u2192 ${c.name}`);\n    } else {\n      return dim(` \u2756 ${c.name}`);\n    }\n  })\n  .filter(Boolean)\n  .join(\"\\n\")}\\n`);\n    }\n\n    let registeredCmp: ComponentInfo | undefined;\n    let figmaInterface: string | undefined;\n    let code: string | undefined;\n    if (registry) {\n      const resultComponent = await askComponent(\n        registry.components,\n        figmaComponentInfo.name,\n        true\n      );\n      if (resultComponent === \"external package\") {\n        const importPath = await askPackageImportPath(devTools);\n\n        devTools?.addExternalPackage(importPath);\n\n        const newRegistry = await devTools?.getRegistry({\n          readAllInputTypes: true,\n        });\n        if (newRegistry) {\n          registry = newRegistry;\n        }\n        if (registry) {\n          const resultComponent = await askComponent(\n            registry?.components.filter((cmp) => cmp.importPath === importPath),\n            figmaComponentInfo.name,\n            true\n          );\n          if (resultComponent === \"skip\") {\n            registeredCmp = undefined;\n          } else {\n            registeredCmp = resultComponent as ComponentInfo;\n          }\n        } else {\n          const importName = await text({\n            message: `Enter the import name of the component you want to map to`,\n            placeholder: \"Button\",\n            validate(value) {\n              if (!value) {\n                return \"Import name cannot be empty\";\n              }\n              const validIdentifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n              if (!validIdentifierRegex.test(value)) {\n                return \"Invalid import name. Please use a valid JavaScript identifier.\";\n              }\n            },\n          });\n          if (isCancel(importName)) {\n            cancel(\"Mapping not saved, goodbye!\");\n            return await exit(1);\n          }\n          const exportType = (await select({\n            message: `Select the type of import for ${importPath}`,\n            options: [\n              {\n                value: \"named\",\n                label: \"Named\",\n                hint: `import { ${importName} } from '${importPath}';`,\n              },\n              {\n                value: \"default\",\n                label: \"Default\",\n                hint: `import ${importName} from '${importPath}';`,\n              },\n            ],\n          })) as any as ExportType;\n          if (isCancel(exportType)) {\n            cancel(\"Mapping not saved, goodbye!\");\n            return await exit(1);\n          }\n\n          // TODO: replace with devTools.loadImport\n          registeredCmp = {\n            id: \"\",\n            exportName: importName,\n            importPath,\n            importName,\n            exportType,\n            relFilePath: importPath,\n            name: importName,\n            inputs: [],\n            dependencies: [{ name: importName }],\n            acceptsChildren: true,\n            filePath: importPath,\n          };\n        }\n      } else if (resultComponent === \"skip\") {\n        registeredCmp = undefined;\n      } else {\n        registeredCmp = resultComponent as ComponentInfo;\n      }\n      if (!registeredCmp) {\n        figmaComponentInfo.documentName = \"-\";\n        log.warning(\"Skipping mapping for \" + figmaComponentInfo.name);\n        continue;\n      }\n      let prompt: string | undefined;\n      let body = getMappingData(\n        figmaComponentInfo,\n        registeredCmp,\n        registry,\n        true,\n        false\n      );\n      figmaInterface = body.figmaInterface;\n      body.meta = {\n        figmaNode: figmaComponentInfo,\n        figmaKey: figmaComponentInfo.key,\n        registeredCmp,\n        cliVersion: sys.version,\n        cliFrameworks: sys.getFrameworks().map((f) => f.name),\n        cliPlatform: sys.platform(),\n        cliDeviceId: await sys.getDeviceId(),\n      };\n      try {\n        while (true) {\n          body.previousCode = code;\n          body.prompt = prompt;\n\n          let nuLines = 0;\n          log.message(\n            highlight.highlight(\n              \"typescript\",\n              \"// Local component types\\n\" +\n                body.reactInterface +\n                `\\n\\n// \u2756 ${figmaComponentInfo.name}\\n` +\n                body.figmaInterface\n            ).value\n          );\n          log.message(bgCyan(bold(white(\" Streaming >> \"))));\n          console.log(\"\");\n\n          const cursorEnd = bgCyan(bold(white(\" << \")));\n          code = await streamingCode(\n            body,\n            spaceId,\n            userId,\n            privateKey!,\n            (_, collected) => {\n              const newPrint = highlight\n                .highlight(\"typescript\", collected)\n                .value.split(\"\\n\")\n                .map((line) => dim(\"\u2502  \") + line);\n\n              if (nuLines > 0) {\n                const startSlice = Math.max(0, nuLines - 1);\n                const toPrint = newPrint.slice(Math.max(0, startSlice));\n                const toClear = Math.min(nuLines, 1);\n                if (toClear > 0) {\n                  readline.moveCursor(process.stdout, 0, -toClear);\n                  readline.clearScreenDown(process.stdout);\n                }\n\n                process.stdout.write(toPrint.join(\"\\n\") + cursorEnd + \"\\n\");\n              } else {\n                process.stdout.write(newPrint.join(\"\\n\"));\n              }\n              nuLines = newPrint.length;\n            }\n          );\n\n          const next = await text({\n            message: `How does the mapping look? ${dim(\n              'Reply \"good\", or provide feedback (Ctrl+C to exit)'\n            )}`,\n            defaultValue: \"good\",\n            placeholder: \"good\",\n          });\n          if (isCancel(next)) {\n            cancel(\"Mapping not saved, goodbye!\");\n            return await exit(1);\n          }\n          if (next.trim() === \"good\") {\n            break;\n          }\n          track(\"figma add follow up prompt\", {\n            spaceId,\n            prompt: next,\n          });\n          prompt = next as string;\n        }\n      } catch (e) {\n        Sentry.captureException(e);\n        cancel(\"LLM failed:\" + String(e));\n        return await exit(1);\n      }\n    } else {\n      const result = await confirm({\n        message: `Create placeholder mapper for ${magenta(\n          `\u2756 ${figmaComponentInfo.name}`\n        )}?`,\n        initialValue: true,\n        active: \"Yes\",\n        inactive: \"Skip\",\n      });\n      if (!result || isCancel(result)) {\n        figmaComponentInfo.documentName = \"-\";\n        log.warning(\n          `Skipping mapping for ${magenta(`\u2756 ${figmaComponentInfo.name}`)}`\n        );\n        continue;\n      }\n      figmaInterface = \"\";\n      registeredCmp = {\n        id: figmaComponentInfo.key,\n        exportName: getFigmaComponentName(figmaComponentInfo.name),\n        importPath: \"@components\",\n        importName: getFigmaComponentName(figmaComponentInfo.name),\n        exportType: \"named\",\n        isRegistered: true,\n        name: getFigmaComponentName(figmaComponentInfo.name),\n        filePath: \"./placeholder\",\n        inputs: [],\n        relFilePath: \"./placeholder.tsx\",\n      };\n      code = `function Mapper(figma: BaseFigmaProps) {\n  return (\n    <${registeredCmp.importName} />\n  );\n}`;\n    }\n\n    const componentExport =\n      registeredCmp.exportType === \"default\"\n        ? `import ${registeredCmp.importName} from \"${registeredCmp.importPath}\";\\n`\n        : `import { ${registeredCmp.importName} } from \"${registeredCmp.importPath}\";\\n`;\n\n    const url = figmaUrl.startsWith(\"https://\")\n      ? `\\nurl: ${JSON.stringify(figmaUrl)},`\n      : \"\";\n\n    // write file to disk\n    let pragma = \"\";\n    if (\n      devTools?.framework !== \"react\" &&\n      devTools?.framework !== \"next\" &&\n      devTools?.framework !== \"@remix-run/react\"\n    ) {\n      pragma = \"// @ts-nocheck\\n\";\n    }\n    let otherTypes = \"\";\n    let mappingCode = `\n// \u2756 ${figmaComponentInfo.name}\n${figmaInterface}\n\n// Read more at https://www.khulnasoft.com/c/docs/mapping-functions\nfigmaMapping({${url}\n  componentKey: ${JSON.stringify(figmaComponentInfo.key)},\n  mapper${code?.replace(\"function Mapper(\", \"(\")}\n});\n    `;\n    mappingCode = mappingCode.replace(/\\bReact\\.ReactNode\\b/gm, \"ChildrenNode\");\n\n    const imports = [\"figmaMapping\", \"type BaseFigmaProps\"];\n    if (code?.includes(\"falseToUndefined\")) {\n      imports.push(\"falseToUndefined\");\n    }\n    if (code?.includes(\"explicitFalse\")) {\n      imports.push(\"explicitFalse\");\n    }\n    if (mappingCode?.includes(\"ChildrenNode\")) {\n      imports.push(\"ChildrenNode\");\n    }\n    if (\n      new RegExp(`\\\\b${registeredCmp.importName}Props\\\\b`).test(mappingCode)\n    ) {\n      imports.push(\"ComponentProps\");\n      otherTypes += `\ntype ${registeredCmp.importName}Props = ComponentProps<typeof ${registeredCmp.importName}>;\n`;\n    }\n\n    const figmaImportStatement = `import { ${imports.join(\n      \", \"\n    )} } from '@khulnasoft.com/dev-tools/figma';`;\n\n    const finalCode = `${pragma}${figmaImportStatement}${componentExport}${otherTypes}${mappingCode}`;\n\n    const baseName = `${getFigmaComponentName(\n      figmaComponentInfo.name\n    )}.mapper.tsx`;\n\n    // Save in memory the mapping\n    figmaComponentInfo.documentName = registeredCmp.importName;\n\n    // Save to disk\n    if (!mappingPath) {\n      const usesSrc = fs.existsSync(\"src\");\n      filePath = await getMappingPath(\n        `${usesSrc ? \"src/\" : \"\"}mappings/${baseName}`\n      );\n      mappingPath = sys.dirname(filePath);\n      fs.mkdirSync(mappingPath, { recursive: true });\n    } else {\n      filePath = sys.join(mappingPath, baseName);\n    }\n    fs.writeFileSync(\n      filePath,\n      await prettierFormat(finalCode, undefined, filePath)\n    );\n    savedFiled.push(filePath);\n    if (devTools && !registeredCmp.isRegistered && registeredCmp.id) {\n      s = spinner();\n      s.start(\"Registering khulnasoft component in registry\");\n      await devTools.registerComponent({\n        cmpId: registeredCmp.id,\n      });\n      s.stop(`<${registeredCmp.importName}> added to the khulnasoft registry`);\n    }\n  }\n  await setPublicKey(sys, spaceId!, devTools, true);\n\n  if (mappingPath) {\n    if (savedFiled.length === 1) {\n      log.success(\n        `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} New mapper file saved in: ${dim(\n          savedFiled[0]\n        )}`\n      );\n    } else {\n      log.success(\n        `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} Created ${\n          savedFiled.length\n        } new mapping files:\\n${savedFiled.map((f) => `  - ${f}`).join(\"\\n\")}`\n      );\n    }\n\n    outro(\n      dim(\n        \"Figma mappings need to be published to come into effect. You can do this by running:\\n\\n   \"\n      ) +\n        bgBlack(white(bold(\" npx khulnasoft.com figma publish \"))) +\n        \"\\n\\n   \" +\n        dim(\n          \"Read more: https://www.khulnasoft.com/c/docs/cli-mapping#publishing-a-new-mapping\"\n        )\n    );\n\n    track(\"figma add success\", {\n      spaceId,\n      mappingPath,\n    });\n  } else {\n    outro(\"No new mappings were created.\");\n  }\n};\n\nexport interface FigmaComponentInput {\n  id: string;\n  name: string;\n  value?: any;\n  type: string;\n  baseType: \"text\" | \"variant\" | \"boolean\" | \"slot\";\n  variantOptions?: string[];\n  isDefault: boolean;\n  ref?: string;\n}\n\nexport interface FigmaComponentInfo {\n  documentName: string;\n  key: string;\n  tree: string;\n  jsx: string;\n  name: string;\n  inputs: FigmaComponentInput[];\n  description: string;\n  documentationLinks: string[];\n  instanceId: string;\n}\n\nexport const parseFigmaURL = (str: string) => {\n  const url = new URL(str);\n  if (!str.startsWith(\"https://www.figma.com/design/\")) {\n    return null;\n  }\n  const nodeId = url.searchParams.get(\"node-id\")?.replaceAll(\"-\", \":\");\n  const fileID = url.pathname.split(\"/\")[2];\n  if (nodeId && fileID) {\n    return { fileID, nodeId };\n  }\n  return null;\n};\n\nasync function getMappingPath(defaultValue: string) {\n  const mappingPath = await text({\n    message: `Where do you want to save the new mapping? ${dim(\n      \"(Ctrl+C to exit)\"\n    )}`,\n    defaultValue,\n    placeholder: defaultValue,\n    initialValue: defaultValue,\n    validate(value) {\n      if (isAbsolute(value)) {\n        return `Please enter a relative path, not absolute`;\n      }\n      if (!value.endsWith(\".mapper.tsx\") && !value.endsWith(\".mapper.jsx\")) {\n        return `Please enter a path that ends with '.mapper.tsx'`;\n      }\n      if (fs.existsSync(value)) {\n        return `File already exists, please choose a different name`;\n      }\n    },\n  });\n  if (isCancel(mappingPath)) {\n    cancel(\"Mapping not saved, goodbye!\");\n    return await exit(1);\n  }\n  return mappingPath;\n}\n\nconst componentKeyRegex = /^[a-f0-9]{40}$/;\n\nasync function getFigmaNodeDataFromURLs(\n  figmaAuth: {\n    access_token: string;\n    oauth: boolean;\n  },\n  khulnasoftAuth: {\n    privateKey: string;\n    spaceId: string;\n  },\n  urls: string[]\n): Promise<(readonly [string, FigmaComponentInfo])[]> {\n  const importData = await Promise.all(\n    urls.map(async (url) => {\n      let fileId, nodeId;\n      if (url.match(componentKeyRegex)) {\n        try {\n          // Check KV store first\n          const data: FigmaComponentInfo | undefined = await getKhulnasoftSpaceKv({\n            ...khulnasoftAuth,\n            docId: url,\n          });\n\n          if (data) {\n            return [[url, data]] as const;\n          }\n\n          let figmaRestApiData;\n          try {\n            // Fall back to Figma components API, requires that the component be published and that the user has access to it\n            figmaRestApiData = await figmaApi(`components/${url}`, {\n              auth: figmaAuth,\n            });\n            fileId = figmaRestApiData.meta.file_key;\n            nodeId = figmaRestApiData.meta.node_id;\n          } catch (e) {\n            log.warning(`Failed to fetch component from Figma API.`);\n          }\n        } catch (e) {\n          Sentry.captureException(e);\n          throw e;\n        }\n      }\n\n      if (!fileId || !nodeId) {\n        // Parse figma link URL\n        // TODO: Return all components in selection\n        let parsedFile;\n        try {\n          parsedFile = parseFigmaURL(url);\n        } catch (e) {}\n        if (!parsedFile) {\n          cancel(\n            \"Invalid Figma URL, use Cmd+L while selecting a figma component to get a link to selection.\\n   \" +\n              \"Or make sure the command is copied correctly from the Figma plugin and the same khulnasoft space is being used.\"\n          );\n          return await exit(1);\n        }\n        if (parsedFile) {\n          ({ fileID: fileId, nodeId } = parsedFile);\n        }\n      }\n\n      // Figma link or published component fileId and nodeId\n      const figmaRestApiData = await getFigmaNodeData(\n        figmaAuth,\n        fileId,\n        nodeId\n      );\n\n      // If link is to a document containing components check for them in the kv store\n      const components = getUsedComponents(\n        figmaRestApiData[nodeId].document,\n        figmaRestApiData[nodeId].components\n      );\n\n      if (components) {\n        const componentInfos = (\n          await Promise.all(\n            Array.from(components).map(async ([, header]) => {\n              // Check KV store first\n              return (await getKhulnasoftSpaceKv({\n                ...khulnasoftAuth,\n                docId: header.key,\n              })) as FigmaComponentInfo | undefined;\n            })\n          )\n        ).filter(nonNull) as FigmaComponentInfo[];\n        if (componentInfos.length) {\n          return componentInfos.map((info) => [url, info] as const);\n        }\n      }\n\n      const info = await getComponentInfo(figmaRestApiData[nodeId], nodeId);\n      if (info) {\n        return [[url, info]] as const;\n      }\n      return [];\n    })\n  );\n\n  return importData.flat().filter(nonNull);\n}\n\nexport const getFigmaNodeData = async (\n  auth: {\n    access_token: string;\n    oauth: boolean;\n  },\n  fileId: string,\n  nodeIds: string,\n  depth?: number\n) => {\n  // curl -H 'X-FIGMA-TOKEN: <personal access token>' 'https://api.figma.com/v1/files/:file_key/nodes?ids=1:34'\n  const data = await figmaApi(`files/${fileId}/nodes`, {\n    auth,\n    params: {\n      ids: nodeIds,\n      depth,\n    },\n  });\n\n  return data.nodes;\n};\n\ntype FigmaAPIOpts = {\n  auth: {\n    access_token: string;\n    oauth: boolean;\n  };\n  params?: Record<string, any>;\n};\n\nconst baseFigmaAPI = \"https://api.figma.com/v1/\",\n  figmaApi = async (path: string, { auth, params }: FigmaAPIOpts) => {\n    const url = new URL(`${baseFigmaAPI}${path}`),\n      headers: Record<string, string> = {};\n    if (auth.oauth) {\n      headers.Authorization = `Bearer ${auth.access_token}`;\n    } else {\n      headers[\"X-FIGMA-TOKEN\"] = auth.access_token;\n    }\n\n    if (params) {\n      for (const key in params) {\n        if (params[key] != null) {\n          url.searchParams.set(key, params[key].toString());\n        }\n      }\n    }\n\n    const res = await safeFetch(url, {\n      headers,\n    });\n    if (!res.ok) {\n      throw new Error(`Figma REST ${res.statusText}: ${await res.text()}`);\n    }\n    return res.json();\n  };\n\nfunction findAllWithCriteria(\n  node: SceneNode,\n  criteria: { types: string[] }\n): (InstanceNode | TextNode)[] {\n  const types = criteria.types;\n\n  const nodes = [];\n  if (types.includes(node.type)) {\n    nodes.push(node);\n  }\n  if (\"children\" in node) {\n    nodes.push(\n      ...node.children.flatMap((n) => findAllWithCriteria(n, criteria))\n    );\n  }\n  return nodes as any;\n}\nexport function getInputsSlotsFromComponentPropertyDefinitions(\n  mainComponent: ComponentSetNode | ComponentNode\n) {\n  const inputs: FigmaComponentInput[] = [];\n  let cmpPropDefinitions: ComponentPropertyDefinitions = {};\n  try {\n    cmpPropDefinitions = mainComponent.componentPropertyDefinitions ?? {};\n  } catch (e) {\n    // TODO: Show a nice warning in UI for users\n    console.error(\"Invalid Component Property Definitions\", e);\n  }\n\n  const components =\n    mainComponent.type === \"COMPONENT_SET\"\n      ? (mainComponent.children as ComponentNode[])\n      : [mainComponent];\n\n  const groups = new Map();\n  const instances: (InstanceNode | TextNode)[] = [];\n  const ids = Object.keys(cmpPropDefinitions);\n  const nameMap = computeInputNames(ids);\n\n  for (const component of components) {\n    const instancesOriginal = findAllWithCriteria(component, {\n      types: [\"INSTANCE\", \"TEXT\"],\n    });\n    for (const instance of instancesOriginal) {\n      instances.push(instance);\n      const refs = instance.componentPropertyReferences;\n      if (refs) {\n        if (refs.visible) {\n          if (refs.characters) {\n            groups.set(refs.characters, nameMap(refs.visible));\n          }\n          if (refs.mainComponent) {\n            groups.set(refs.mainComponent, nameMap(refs.visible));\n          }\n        }\n      }\n    }\n  }\n\n  for (const id of ids) {\n    const cmpPropDefinition = cmpPropDefinitions[id];\n\n    switch (cmpPropDefinition.type) {\n      case \"TEXT\": {\n        // text component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: cmpPropDefinition.defaultValue,\n          type: \"string\",\n          baseType: \"text\",\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n\n      case \"BOOLEAN\": {\n        // boolean component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: !!cmpPropDefinition.defaultValue,\n          baseType: \"boolean\",\n          isDefault: true,\n          type: \"boolean\",\n        });\n        break;\n      }\n\n      case \"VARIANT\": {\n        // variant component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: cmpPropDefinition.defaultValue,\n          type:\n            cmpPropDefinition.variantOptions\n              ?.map((a) => `'${a}'`)\n              .join(\" | \") ?? \"string\",\n          baseType: \"variant\",\n          variantOptions: cmpPropDefinition.variantOptions ?? [],\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n\n      case \"INSTANCE_SWAP\": {\n        // instance swap component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: String(cmpPropDefinition.defaultValue),\n          type: \"React.ReactNode\",\n          baseType: \"slot\",\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n    }\n  }\n\n  return { inputs, nameMap };\n}\nfunction computeComponentInfo(\n  figmaKeyOrId: string,\n  mainComponent: ComponentNode | ComponentSetNode\n) {\n  const { inputs, nameMap } =\n    getInputsSlotsFromComponentPropertyDefinitions(mainComponent);\n\n  const figmaNodeInfo: FigmaComponentInfo = {\n    name: mainComponent.name,\n\n    jsx:\n      mainComponent.type === \"COMPONENT_SET\"\n        ? printTreeJSX(mainComponent.children[0], nameMap, 0, 0)\n        : printTreeJSX(mainComponent, nameMap, 0, 0),\n    inputs: inputs,\n    key: mainComponent.key,\n    description: mainComponent.description,\n    documentationLinks: [],\n    instanceId: figmaKeyOrId.includes(\":\") ? figmaKeyOrId : mainComponent.id,\n    documentName: \"\",\n    tree: \"\",\n  };\n\n  return figmaNodeInfo;\n}\n\nexport const REMOVE_EMOJI = /[^\\x00-\\x7F]/g;\n\nfunction getMainComponentPropName(propId: string) {\n  if (typeof propId === \"string\") {\n    // Name#12:3234\n    return propId\n      .replace(/#\\d+:\\d+$/, \"\")\n      .replace(REMOVE_EMOJI, \"\")\n      .trim();\n  }\n  return \"\";\n}\n\nfunction computeInputNames(ids: string[]) {\n  const nameMap = new Map<string, string>();\n  const nameSetted = new Map<string, string>();\n  ids.forEach((id) => {\n    const n = getMainComponentPropName(id);\n    if (nameSetted.has(n)) {\n      if (nameMap.has(id)) {\n        nameMap.set(nameSetted.get(n)!, nameSetted.get(n)!);\n        nameMap.delete(n);\n      }\n      nameMap.set(id, id);\n    } else {\n      nameMap.set(id, n);\n      nameSetted.set(n, id);\n    }\n  });\n  return (key: string) => {\n    const value = nameMap.get(key) ?? getMainComponentPropName(key);\n    if (!value) {\n      throw new Error(\"No value for key \" + key);\n    }\n    return value;\n  };\n}\n\nconst printTreeJSX = (\n  node: SceneNode,\n  nameMap: (key: string) => string,\n  _index: number,\n  nuSiblings: number,\n  level = -1\n): string => {\n  const spaces = \"  \".repeat(Math.max(level + 1, 0));\n\n  let output = \"\";\n  const type = node.type;\n  let shouldWalk =\n    type === \"GROUP\" || type === \"FRAME\" || (level < 0 && \"children\" in node);\n  let instance = \"\";\n  const emit = level >= 0;\n  if (emit) {\n    let props = \"\";\n    if (node.type === \"INSTANCE\") {\n      if (\n        node.componentPropertyReferences &&\n        node.componentPropertyReferences.mainComponent\n      ) {\n        output += `${spaces}{figma[\"${nameMap(\n          node.componentPropertyReferences.mainComponent\n        )}\"]}\\n`;\n        return output;\n      } else {\n        const cmp = undefined as any;\n        if (false) {\n          instance = getFigmaComponentName(cmp.name);\n          if (cmp.name.startsWith(\".\")) {\n            shouldWalk = true;\n          } else if (nuSiblings === 1) {\n            shouldWalk = true;\n          }\n        } else {\n          instance = node.type;\n        }\n      }\n    }\n    if (instance === \"\") {\n      // if ('layoutMode' in node && node.layoutMode === 'HORIZONTAL') {\n      //   instance = 'hframe';\n      // } else if ('layoutMode' in node && node.layoutMode === 'VERTICAL') {\n      //   instance = 'vframe';\n      // } else {\n      // }\n      instance = node.type;\n    }\n    if (node.type !== \"TEXT\" || !node.autoRename) {\n      props += ` name=\"${node.name}\"`;\n    }\n    if (\n      node.componentPropertyReferences &&\n      node.componentPropertyReferences.visible\n    ) {\n      props += ` visible={figma[\"${nameMap(\n        node.componentPropertyReferences.visible\n      )}\"]}`;\n    }\n    output += `${spaces}<${instance}${props}`;\n  }\n  if (node.type === \"TEXT\") {\n    if (emit) {\n      output += `>\\n`;\n    }\n    if (\n      node.componentPropertyReferences &&\n      node.componentPropertyReferences.characters\n    ) {\n      output += `${spaces}  {figma[\"${nameMap(\n        node.componentPropertyReferences.characters\n      )}\"]}\\n`;\n    } else {\n      output += `${spaces}  ${node.characters}\\n`;\n    }\n    if (emit) {\n      output += `${spaces}</${instance}>\\n`;\n    }\n  } else if (shouldWalk && \"children\" in node && node.children.length > 0) {\n    if (emit) {\n      output += `>\\n`;\n    }\n    let index = 0;\n    for (const child of node.children) {\n      output += printTreeJSX(\n        child,\n        nameMap,\n        index,\n        node.children.length,\n        level + 1\n      );\n      index++;\n    }\n    if (emit) {\n      output += `${spaces}</${instance}>\\n`;\n    }\n  } else if (emit) {\n    output += `/>\\n`;\n  }\n  return output;\n};\n\nexport function getFigmaComponentName(name: string) {\n  name = name.replace(REMOVE_EMOJI, \"\");\n  name = name.replace(/[\\W\\d]/g, \" \");\n  name = name.trim();\n  name = camelize(name);\n  // capilize first letter\n  name = name.charAt(0).toUpperCase() + name.slice(1);\n  return name;\n}\n\nfunction camelize(str: string) {\n  return str\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word, index) {\n      return index === 0 ? word.toLowerCase() : word.toUpperCase();\n    })\n    .replace(/\\s+/g, \"\");\n}\n\nexport interface MappingCodeV2 {\n  figmaInterface: string;\n  reactInterface: string;\n  componentRegistry: string;\n  figmaComponentName: string;\n  figmaTree: string;\n  meta?: Record<string, any>;\n\n  previousCode?: string;\n  prompt?: string;\n}\n\nexport function generateReactInterface(\n  registeredCmp: ComponentInfo,\n  cmpRegistry: ComponentRegistry,\n  addChildrenOptions: boolean\n) {\n  const shouldMatch = new RegExp(`^${registeredCmp.importName}[A-Z]`);\n  const possibleChildren = !addChildrenOptions\n    ? []\n    : cmpRegistry.components\n        .filter((a) => shouldMatch.test(a.name))\n        .map((a) => `<${a.name}>`);\n\n  return `interface ${registeredCmp.importName}Props {\n${(registeredCmp.inputs || [])\n  .filter((input) => shouldIncludeInput(input))\n  .map(\n    (input) =>\n      `  ${getPropertyAccessor(input.name)}${\n        input.required ? \"\" : \"?\"\n      }: ${getTypeFromComponentInput(input)};${\n        possibleChildren.length > 0 && input.name === \"children\"\n          ? ` // possible children: ` + possibleChildren.join(\", \")\n          : \"\"\n      }`\n  )\n  .join(\"\\n\")}\n}`;\n}\n\nexport function getMappingData(\n  figmaNode: FigmaComponentInfo,\n  registeredCmp: ComponentInfo,\n  cmpRegistry: ComponentRegistry,\n  useJSX: boolean,\n  addChildrenOptions: boolean\n): MappingCodeV2 {\n  const dependency = registeredCmp.dependencies?.[0].name;\n  const figmaComponentName = getFigmaComponentName(figmaNode.name);\n  const componentRegistry = cmpRegistry.components\n    .map((a) => a.name)\n    .join(\", \");\n  const reactInterface = `// Component: <${registeredCmp.importName}>${\n    dependency ? \" from \" + dependency : \"\"\n  }\n${generateReactInterface(registeredCmp, cmpRegistry, addChildrenOptions)}`;\n\n  const figmaInterface = `interface Figma${figmaComponentName}Props extends BaseFigmaProps {\n${figmaNode.inputs\n  .map(\n    (input) =>\n      `  ${getPropertyAccessor(input.name)}?: ${getTypeFromComponentInput(\n        input\n      )};${input.ref ? ` // when \"${input.ref}\" is true` : \"\"}`\n  )\n  .join(\"\\n\")}\n}`;\n\n  const figmaTree = `${useJSX ? figmaNode.jsx : figmaNode.tree}`;\n\n  return {\n    figmaInterface,\n    figmaTree,\n    componentRegistry,\n    figmaComponentName,\n    reactInterface,\n  };\n}\n\nconst EXCLUDE_PROPS = new Set([\n  \"id\",\n  \"class\",\n  \"className\",\n  \"key\",\n  \"hidden\",\n  \"style\",\n  \"styles\",\n  \"css\",\n  \"ref\",\n]);\n\nconst shouldIncludeInput = (input: ComponentInput) => {\n  if (EXCLUDE_PROPS.has(input.name)) {\n    return false;\n  }\n  // Skip type object\n  if (input.type === \"object\") {\n    return false;\n  }\n  // Skip capital letters and _\n  if (/^[A-Z_]/.test(input.name)) {\n    return false;\n  }\n  // Skip event handlers\n  if (/^on[A-Z]/.test(input.name)) {\n    return false;\n  }\n  if (getTypeFromComponentInput(input) === \"null\") {\n    return false;\n  }\n  return true;\n};\n\nexport const getTypeFromComponentInput = (input: ComponentInput): string => {\n  if (input.type === \"reference\") {\n    return \"ReactNode\";\n  }\n  if (input.type === \"file\") {\n    return \"string\";\n  }\n  if (input.type === \"richText\") {\n    return \"string\";\n  }\n  if (input.enum) {\n    return input.enum.map((a) => `'${a}'`).join(\" | \");\n  }\n  if (input.meta?.ts) {\n    return input.meta.ts;\n  }\n  return input.type;\n};\n\nexport const getPropertyAccessor = (name: string) => {\n  if (/^[a-zA-Z_]\\w*$/.test(name)) {\n    return name;\n  }\n  return `\"${name}\"`;\n};\n\nexport function getMappingPrompt(\n  figmaNode: FigmaComponentInfo,\n  registeredCmp: ComponentInfo,\n  cmpRegistry: ComponentRegistry,\n  useJSX = false\n) {\n  const { figmaInterface, componentRegistry, figmaTree, reactInterface } =\n    getMappingData(figmaNode, registeredCmp, cmpRegistry, useJSX, true);\n  return `${figmaInterface}\n// Component registry: ${componentRegistry}}\n  ${\n    figmaNode.documentationLinks.length > 0\n      ? figmaNode.documentationLinks.map((d) => `// Docs: ${d}`).join(\"\\n\")\n      : \"\"\n  }\n${reactInterface}\n${`\\n/*\\nfigma.$children\\n${figmaTree}*/`}\n${figmaInterface}`;\n}\n\nasync function streamingCode(\n  body: MappingCodeV2,\n  spaceId: string | undefined,\n  userId: string | undefined,\n  privateKey: string,\n  onChunk: (chunk: string, collected: string) => void\n): Promise<string | undefined> {\n  const url = new URL(`${apiAirV2Host}/mappings/completions`);\n  if (spaceId) {\n    url.searchParams.set(\"apiKey\", spaceId);\n  }\n  if (userId) {\n    url.searchParams.set(\"userId\", userId);\n  }\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${privateKey}`,\n    },\n    body: JSON.stringify(body),\n  });\n  if (!res.ok) {\n    throw new Error(\"Fetch to server failed\");\n  }\n\n  if (res.body) {\n    let finalResponse = \"\";\n    const reader = res.body.getReader();\n    let done, value;\n    while (!done) {\n      ({ value, done } = await reader.read());\n      if (done) {\n        return finalResponse;\n      }\n      const str = new TextDecoder().decode(value);\n      finalResponse += str;\n      onChunk(str, finalResponse);\n    }\n    return finalResponse;\n  }\n  return undefined;\n}\n\nasync function getComponentInfo(\n  figmaRestApiData: any,\n  nodeId: string\n): Promise<FigmaComponentInfo | undefined> {\n  const nodeDocument = figmaRestApiData.document;\n  if (\n    nodeDocument.type !== \"COMPONENT\" &&\n    nodeDocument.type !== \"COMPONENT_SET\"\n  ) {\n    let message = `Seems like the pasted URL points to a ${nodeDocument.type} node, not a COMPONENT or COMPONENT_SET.`;\n    if (nodeDocument.type === \"INSTANCE\") {\n      message += `\\nDouble click and select \"Go to main component\", then copy the URL to the figma COMPONENT`;\n    }\n    cancel(message);\n    return await exit(1);\n  }\n\n  const componentKey =\n    figmaRestApiData.components[nodeId]?.key ??\n    figmaRestApiData.componentSets[nodeId]?.key;\n  if (!componentKey) {\n    cancel(\"Pasted URL does not correspond to a component or component set\");\n    return await exit(1);\n  }\n  figmaRestApiData.document.key = componentKey;\n\n  return computeComponentInfo(nodeId, nodeDocument);\n}\n\nfunction nonNull<T>(value: T | null | undefined): value is T {\n  return value != null;\n}\n\ntype ComponentHeader = {\n  key: string;\n  name: string;\n  description: string;\n  remote: boolean;\n  documentationLinks: string[];\n};\n\nfunction getUsedComponents(\n  node: any,\n  components: Record<string, ComponentHeader>,\n  output: Map<string, ComponentHeader> = new Map()\n) {\n  debugger;\n  if (node.componentId) {\n    output.set(node.componentId, components[node.componentId]);\n  }\n  if (node.children) {\n    for (const child of node.children) {\n      getUsedComponents(child, components, output);\n    }\n  }\n\n  return output;\n}\n\nasync function askPackageImportPath(devTools: DevTools | undefined) {\n  if (!devTools) {\n    const importPath = await text({\n      message: `Enter the import path to the component you want to map to:`,\n      placeholder: \"@mui/material\",\n      validate(value) {\n        if (!value) {\n          return \"Import path cannot be empty\";\n        }\n        const validImportRegex =\n          /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*(\\/.+)?$/i;\n        if (!validImportRegex.test(value)) {\n          return \"Invalid import path format. Please use a valid ESM import path.\";\n        }\n      },\n    });\n    if (isCancel(importPath)) {\n      cancel(\"Mapping not saved, goodbye!\");\n      return await exit(1);\n    }\n    return importPath;\n  }\n  const dependencyTree = await devTools.findAllDependencies();\n\n  if (!dependencyTree || dependencyTree.length === 0) {\n    return null;\n  }\n\n  // Filter out known non-component packages\n  const componentPackages = dependencyTree.filter(\n    (pkg) => !isNonComponentPackages(pkg.name)\n  );\n\n  if (componentPackages.length === 0) {\n    return null;\n  }\n\n  const choices = componentPackages.map((pkg) => ({\n    title: pkg.name,\n    value: pkg.name,\n  }));\n\n  const packageResult = await prompts({\n    type: \"autocomplete\",\n    name: \"package\",\n    message: `Select an installed external package:`,\n    hint: \"Type or use arrow keys. Press Enter to select\",\n    choices: choices,\n    async suggest(input, choices) {\n      input = input.toLowerCase();\n      const suggestions = choices\n        .map((c) => {\n          const entryText = c.value.trim().toLowerCase();\n          let d = 0;\n          if (input.length === 0) {\n            d = 0;\n          } else {\n            d = distance(input, entryText);\n          }\n          return {\n            ...c,\n            distance: d,\n          };\n        })\n        .sort((a, b) => a.distance - b.distance)\n        .filter((c) => {\n          return c.title.toLowerCase().includes(input);\n        });\n      return suggestions;\n    },\n  });\n\n  if (!packageResult.package) {\n    cancel(\"Package selection cancelled\");\n    return await exit(1);\n  }\n\n  let importPath = packageResult.package;\n  const selectedPackageInfo = componentPackages.find(\n    (pkg) => pkg.name === packageResult.package\n  );\n  function startsWithCapital(str: string): boolean {\n    return /^[A-Z]/.test(str);\n  }\n\n  if (selectedPackageInfo && selectedPackageInfo.subPackages.length > 0) {\n    // Filter out known non-component subpackages\n    const componentSubPackages = selectedPackageInfo.subPackages.filter(\n      (sub) => !NON_COMPONENT_PACKAGES.has(sub) && startsWithCapital(sub)\n    );\n\n    if (componentSubPackages.length > 0) {\n      const choices = [\n        {\n          title: `${selectedPackageInfo.name} ${dim(\"(Ctrl+C)\")}`,\n          value: null,\n        },\n        ...componentSubPackages.map((sub) => ({\n          title: `${dim(selectedPackageInfo.name)}/${sub}`,\n          value: sub,\n        })),\n      ];\n      const subPackageResult = await prompts({\n        type: \"autocomplete\",\n        name: \"subPackage\",\n        message: `Select a component subpackage (optional):`,\n        hint: \"Type or use arrow keys. Press Enter to select\",\n        async suggest(input, choices) {\n          input = input.toLowerCase().replace(selectedPackageInfo.name, \"\");\n          const suggestions = choices\n            .map((c) => {\n              if (c.value === null) {\n                return {\n                  ...c,\n                  distance: 0,\n                };\n              }\n              const entryText = c.value\n                ? c.value.trim().toLowerCase()\n                : selectedPackageInfo.name;\n              let d = 0;\n              if (input.length === 0) {\n                d = 0;\n              } else {\n                d = distance(input, entryText);\n              }\n              return {\n                ...c,\n                distance: d,\n              };\n            })\n            .sort((a, b) => a.distance - b.distance)\n            .filter((c) => {\n              return c.title.toLowerCase().includes(input);\n            });\n          return suggestions;\n        },\n        choices,\n      });\n\n      if (\n        subPackageResult.subPackage !==\n        `${selectedPackageInfo.name} ${dim(\"(Ctrl+C)\")}`\n      ) {\n        importPath = `${packageResult.package}/${subPackageResult.subPackage}`;\n      }\n    }\n  }\n  return importPath;\n}\n\nconst NON_COMPONENT_PACKAGES = new Set([\n  \"react\",\n  \"react-dom\",\n  \"next\",\n  \"nextjs\",\n  \"typescript\",\n  \"babel\",\n  \"webpack\",\n  \"eslint\",\n  \"prettier\",\n  \"jest\",\n  \"lodash\",\n  \"axios\",\n  \"express\",\n  \"moment\",\n  \"redux\",\n  \"react-redux\",\n  \"styled-components\",\n  \"emotion\",\n  \"@types/react\",\n  \"@types/node\",\n  // Common subpackages that aren't components\n  \"utils\",\n  \"helpers\",\n  \"constants\",\n  \"types\",\n  \"interfaces\",\n  \"hooks\",\n  \"context\",\n  \"providers\",\n  \"store\",\n  \"reducers\",\n  \"actions\",\n  \"services\",\n  \"api\",\n  \"clsx\",\n  \"class-variance-authority\",\n  \"lucide-react\",\n  \"dotenv\",\n]);\n\nconst isNonComponentPackages = (packageName: string) => {\n  if (packageName.startsWith(\"@types\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"@emotion\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"@khulnasoft.com\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"eslint\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"prettier\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"jest\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"lodash\")) {\n    return true;\n  }\n  if (packageName.includes(\"autoprefixer\")) {\n    return true;\n  }\n  if (packageName.includes(\"tailwind\")) {\n    return true;\n  }\n  if (packageName.includes(\"postcss\")) {\n    return true;\n  }\n  if (packageName.includes(\"webpack\")) {\n    return true;\n  }\n  if (packageName.includes(\"babel\")) {\n    return true;\n  }\n  if (packageName.includes(\"typescript\")) {\n    return true;\n  }\n  if (packageName.includes(\"rollup\")) {\n    return true;\n  }\n  if (packageName.includes(\"vite\")) {\n    return true;\n  }\n  if (packageName.includes(\"esbuild\")) {\n    return true;\n  }\n  if (packageName.includes(\"storybook\")) {\n    return true;\n  }\n  if (packageName.includes(\"testing-library\")) {\n    return true;\n  }\n  if (packageName.includes(\"cypress\")) {\n    return true;\n  }\n  return NON_COMPONENT_PACKAGES.has(packageName);\n};\n\nasync function askComponent(\n  components: ComponentInfo[],\n  componentNameRef: string,\n  addExternalPackage: boolean\n) {\n  const indent = \"\";\n  const bestMatch = componentNameRef.toLowerCase();\n  function isGoodMatch(c: ComponentInfo) {\n    const cmpName = c.importName.toLowerCase();\n    let d = distance(cmpName, bestMatch);\n    if (cmpName.includes(bestMatch)) {\n      d -= bestMatch.length;\n    }\n    return d;\n  }\n  const choices = components\n    .slice()\n    .sort((a, b) => {\n      const aDistance = isGoodMatch(a);\n      const bDistance = isGoodMatch(b);\n\n      if (aDistance === bDistance) {\n        return a.importName.localeCompare(b.importName);\n      }\n      return aDistance - bDistance;\n    })\n    .map((c) => {\n      let title = `${c.importName}`;\n      if (isGoodMatch(c) < 3) {\n        title = bold(yellow(\"\u2605 \") + title);\n      } else {\n        title = title;\n      }\n      return {\n        title: indent + title + dim(` from '${c.importPath}'`),\n        value: c as ComponentInfo | string,\n      };\n    });\n\n  choices.push({\n    title: indent + \"\u23ED\uFE0F  Skip \" + dim(\"(Ctrl+C)\"),\n    value: \"skip\",\n  });\n  if (addExternalPackage) {\n    choices.push({\n      title: indent + \"\uD83D\uDCE6 External npm package\",\n      value: \"external package\",\n    });\n  }\n  const result = await prompts({\n    type: \"autocomplete\",\n    name: \"component\",\n    message: `Select a code component to map ${bold(\n      magenta(`\u2756 ${componentNameRef}`)\n    )}`,\n    hint: \"Type or use arrow keys. Press Enter to select\",\n    async suggest(input, choices) {\n      input = input.toLowerCase();\n      const distanceInput = input.length === 0 ? bestMatch : input;\n      const suggestions = choices\n        .map((c) => {\n          const entryText = (\n            typeof c.value === \"string\" ? c.value : c.value.importName\n          )\n            .trim()\n            .toLowerCase();\n          let d = 0;\n          if (input.length === 0 && typeof c.value === \"string\") {\n            d = 2;\n          } else {\n            d = distance(distanceInput, entryText);\n            if (entryText.includes(bestMatch)) {\n              d -= bestMatch.length;\n            }\n            if (typeof c.value === \"string\") {\n              d += 1000;\n            }\n          }\n          return {\n            ...c,\n            distance: d,\n          };\n        })\n        .sort((a, b) => a.distance - b.distance)\n        .filter((c) => {\n          if (c.value === \"external package\") {\n            return true;\n          }\n          if (c.value === \"skip\") {\n            return true;\n          }\n          return c.title.toLowerCase().includes(input);\n        });\n\n      return suggestions;\n    },\n    choices: choices,\n  });\n  return result.component;\n}\n\ndeclare const VERSION: string;\n", "/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cPlusPlus(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\n/*\nLanguage: Arduino\nAuthor: Stefania Mellai <s.mellai@arduino.cc>\nDescription: The Arduino\u00AE Language is a superset of C++. This rules are designed to highlight the Arduino\u00AE source code. For info about language see http://www.arduino.cc.\nWebsite: https://www.arduino.cc\n*/\n\n\n/** @type LanguageFn */\nfunction arduino(hljs) {\n  const ARDUINO_KW = {\n    type: [\n      \"boolean\",\n      \"byte\",\n      \"word\",\n      \"String\"\n    ],\n    built_in: [\n      \"KeyboardController\",\n      \"MouseController\",\n      \"SoftwareSerial\",\n      \"EthernetServer\",\n      \"EthernetClient\",\n      \"LiquidCrystal\",\n      \"RobotControl\",\n      \"GSMVoiceCall\",\n      \"EthernetUDP\",\n      \"EsploraTFT\",\n      \"HttpClient\",\n      \"RobotMotor\",\n      \"WiFiClient\",\n      \"GSMScanner\",\n      \"FileSystem\",\n      \"Scheduler\",\n      \"GSMServer\",\n      \"YunClient\",\n      \"YunServer\",\n      \"IPAddress\",\n      \"GSMClient\",\n      \"GSMModem\",\n      \"Keyboard\",\n      \"Ethernet\",\n      \"Console\",\n      \"GSMBand\",\n      \"Esplora\",\n      \"Stepper\",\n      \"Process\",\n      \"WiFiUDP\",\n      \"GSM_SMS\",\n      \"Mailbox\",\n      \"USBHost\",\n      \"Firmata\",\n      \"PImage\",\n      \"Client\",\n      \"Server\",\n      \"GSMPIN\",\n      \"FileIO\",\n      \"Bridge\",\n      \"Serial\",\n      \"EEPROM\",\n      \"Stream\",\n      \"Mouse\",\n      \"Audio\",\n      \"Servo\",\n      \"File\",\n      \"Task\",\n      \"GPRS\",\n      \"WiFi\",\n      \"Wire\",\n      \"TFT\",\n      \"GSM\",\n      \"SPI\",\n      \"SD\"\n    ],\n    _hints: [\n      \"setup\",\n      \"loop\",\n      \"runShellCommandAsynchronously\",\n      \"analogWriteResolution\",\n      \"retrieveCallingNumber\",\n      \"printFirmwareVersion\",\n      \"analogReadResolution\",\n      \"sendDigitalPortPair\",\n      \"noListenOnLocalhost\",\n      \"readJoystickButton\",\n      \"setFirmwareVersion\",\n      \"readJoystickSwitch\",\n      \"scrollDisplayRight\",\n      \"getVoiceCallStatus\",\n      \"scrollDisplayLeft\",\n      \"writeMicroseconds\",\n      \"delayMicroseconds\",\n      \"beginTransmission\",\n      \"getSignalStrength\",\n      \"runAsynchronously\",\n      \"getAsynchronously\",\n      \"listenOnLocalhost\",\n      \"getCurrentCarrier\",\n      \"readAccelerometer\",\n      \"messageAvailable\",\n      \"sendDigitalPorts\",\n      \"lineFollowConfig\",\n      \"countryNameWrite\",\n      \"runShellCommand\",\n      \"readStringUntil\",\n      \"rewindDirectory\",\n      \"readTemperature\",\n      \"setClockDivider\",\n      \"readLightSensor\",\n      \"endTransmission\",\n      \"analogReference\",\n      \"detachInterrupt\",\n      \"countryNameRead\",\n      \"attachInterrupt\",\n      \"encryptionType\",\n      \"readBytesUntil\",\n      \"robotNameWrite\",\n      \"readMicrophone\",\n      \"robotNameRead\",\n      \"cityNameWrite\",\n      \"userNameWrite\",\n      \"readJoystickY\",\n      \"readJoystickX\",\n      \"mouseReleased\",\n      \"openNextFile\",\n      \"scanNetworks\",\n      \"noInterrupts\",\n      \"digitalWrite\",\n      \"beginSpeaker\",\n      \"mousePressed\",\n      \"isActionDone\",\n      \"mouseDragged\",\n      \"displayLogos\",\n      \"noAutoscroll\",\n      \"addParameter\",\n      \"remoteNumber\",\n      \"getModifiers\",\n      \"keyboardRead\",\n      \"userNameRead\",\n      \"waitContinue\",\n      \"processInput\",\n      \"parseCommand\",\n      \"printVersion\",\n      \"readNetworks\",\n      \"writeMessage\",\n      \"blinkVersion\",\n      \"cityNameRead\",\n      \"readMessage\",\n      \"setDataMode\",\n      \"parsePacket\",\n      \"isListening\",\n      \"setBitOrder\",\n      \"beginPacket\",\n      \"isDirectory\",\n      \"motorsWrite\",\n      \"drawCompass\",\n      \"digitalRead\",\n      \"clearScreen\",\n      \"serialEvent\",\n      \"rightToLeft\",\n      \"setTextSize\",\n      \"leftToRight\",\n      \"requestFrom\",\n      \"keyReleased\",\n      \"compassRead\",\n      \"analogWrite\",\n      \"interrupts\",\n      \"WiFiServer\",\n      \"disconnect\",\n      \"playMelody\",\n      \"parseFloat\",\n      \"autoscroll\",\n      \"getPINUsed\",\n      \"setPINUsed\",\n      \"setTimeout\",\n      \"sendAnalog\",\n      \"readSlider\",\n      \"analogRead\",\n      \"beginWrite\",\n      \"createChar\",\n      \"motorsStop\",\n      \"keyPressed\",\n      \"tempoWrite\",\n      \"readButton\",\n      \"subnetMask\",\n      \"debugPrint\",\n      \"macAddress\",\n      \"writeGreen\",\n      \"randomSeed\",\n      \"attachGPRS\",\n      \"readString\",\n      \"sendString\",\n      \"remotePort\",\n      \"releaseAll\",\n      \"mouseMoved\",\n      \"background\",\n      \"getXChange\",\n      \"getYChange\",\n      \"answerCall\",\n      \"getResult\",\n      \"voiceCall\",\n      \"endPacket\",\n      \"constrain\",\n      \"getSocket\",\n      \"writeJSON\",\n      \"getButton\",\n      \"available\",\n      \"connected\",\n      \"findUntil\",\n      \"readBytes\",\n      \"exitValue\",\n      \"readGreen\",\n      \"writeBlue\",\n      \"startLoop\",\n      \"IPAddress\",\n      \"isPressed\",\n      \"sendSysex\",\n      \"pauseMode\",\n      \"gatewayIP\",\n      \"setCursor\",\n      \"getOemKey\",\n      \"tuneWrite\",\n      \"noDisplay\",\n      \"loadImage\",\n      \"switchPIN\",\n      \"onRequest\",\n      \"onReceive\",\n      \"changePIN\",\n      \"playFile\",\n      \"noBuffer\",\n      \"parseInt\",\n      \"overflow\",\n      \"checkPIN\",\n      \"knobRead\",\n      \"beginTFT\",\n      \"bitClear\",\n      \"updateIR\",\n      \"bitWrite\",\n      \"position\",\n      \"writeRGB\",\n      \"highByte\",\n      \"writeRed\",\n      \"setSpeed\",\n      \"readBlue\",\n      \"noStroke\",\n      \"remoteIP\",\n      \"transfer\",\n      \"shutdown\",\n      \"hangCall\",\n      \"beginSMS\",\n      \"endWrite\",\n      \"attached\",\n      \"maintain\",\n      \"noCursor\",\n      \"checkReg\",\n      \"checkPUK\",\n      \"shiftOut\",\n      \"isValid\",\n      \"shiftIn\",\n      \"pulseIn\",\n      \"connect\",\n      \"println\",\n      \"localIP\",\n      \"pinMode\",\n      \"getIMEI\",\n      \"display\",\n      \"noBlink\",\n      \"process\",\n      \"getBand\",\n      \"running\",\n      \"beginSD\",\n      \"drawBMP\",\n      \"lowByte\",\n      \"setBand\",\n      \"release\",\n      \"bitRead\",\n      \"prepare\",\n      \"pointTo\",\n      \"readRed\",\n      \"setMode\",\n      \"noFill\",\n      \"remove\",\n      \"listen\",\n      \"stroke\",\n      \"detach\",\n      \"attach\",\n      \"noTone\",\n      \"exists\",\n      \"buffer\",\n      \"height\",\n      \"bitSet\",\n      \"circle\",\n      \"config\",\n      \"cursor\",\n      \"random\",\n      \"IRread\",\n      \"setDNS\",\n      \"endSMS\",\n      \"getKey\",\n      \"micros\",\n      \"millis\",\n      \"begin\",\n      \"print\",\n      \"write\",\n      \"ready\",\n      \"flush\",\n      \"width\",\n      \"isPIN\",\n      \"blink\",\n      \"clear\",\n      \"press\",\n      \"mkdir\",\n      \"rmdir\",\n      \"close\",\n      \"point\",\n      \"yield\",\n      \"image\",\n      \"BSSID\",\n      \"click\",\n      \"delay\",\n      \"read\",\n      \"text\",\n      \"move\",\n      \"peek\",\n      \"beep\",\n      \"rect\",\n      \"line\",\n      \"open\",\n      \"seek\",\n      \"fill\",\n      \"size\",\n      \"turn\",\n      \"stop\",\n      \"home\",\n      \"find\",\n      \"step\",\n      \"tone\",\n      \"sqrt\",\n      \"RSSI\",\n      \"SSID\",\n      \"end\",\n      \"bit\",\n      \"tan\",\n      \"cos\",\n      \"sin\",\n      \"pow\",\n      \"map\",\n      \"abs\",\n      \"max\",\n      \"min\",\n      \"get\",\n      \"run\",\n      \"put\"\n    ],\n    literal: [\n      \"DIGITAL_MESSAGE\",\n      \"FIRMATA_STRING\",\n      \"ANALOG_MESSAGE\",\n      \"REPORT_DIGITAL\",\n      \"REPORT_ANALOG\",\n      \"INPUT_PULLUP\",\n      \"SET_PIN_MODE\",\n      \"INTERNAL2V56\",\n      \"SYSTEM_RESET\",\n      \"LED_BUILTIN\",\n      \"INTERNAL1V1\",\n      \"SYSEX_START\",\n      \"INTERNAL\",\n      \"EXTERNAL\",\n      \"DEFAULT\",\n      \"OUTPUT\",\n      \"INPUT\",\n      \"HIGH\",\n      \"LOW\"\n    ]\n  };\n\n  const ARDUINO = cPlusPlus(hljs);\n\n  const kws = /** @type {Record<string,any>} */ (ARDUINO.keywords);\n\n  kws.type = [\n    ...kws.type,\n    ...ARDUINO_KW.type\n  ];\n  kws.literal = [\n    ...kws.literal,\n    ...ARDUINO_KW.literal\n  ];\n  kws.built_in = [\n    ...kws.built_in,\n    ...ARDUINO_KW.built_in\n  ];\n  kws._hints = ARDUINO_KW._hints;\n\n  ARDUINO.name = 'Arduino';\n  ARDUINO.aliases = [ 'ino' ];\n  ARDUINO.supersetOf = \"cpp\";\n\n  return ARDUINO;\n}\n\nexport { arduino as default };\n", "/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n  const regex = hljs.regex;\n  const VAR = {};\n  const BRACED_VAR = {\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [\n      \"self\",\n      {\n        begin: /:-/,\n        contains: [ VAR ]\n      } // default values\n    ]\n  };\n  Object.assign(VAR, {\n    className: 'variable',\n    variants: [\n      { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n        // negative look-ahead tries to avoid matching patterns that are not\n        // Perl at all like $ident$, @ident@, etc.\n        `(?![\\\\w\\\\d])(?![$])`) },\n      BRACED_VAR\n    ]\n  });\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\(/,\n    end: /\\)/,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const HERE_DOC = {\n    begin: /<<-?\\s*(?=\\w+)/,\n    starts: { contains: [\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(\\w+)/,\n        end: /(\\w+)/,\n        className: 'string'\n      })\n    ] }\n  };\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      SUBST\n    ]\n  };\n  SUBST.contains.push(QUOTE_STRING);\n  const ESCAPED_QUOTE = {\n    match: /\\\\\"/\n  };\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/\n  };\n  const ESCAPED_APOS = {\n    match: /\\\\'/\n  };\n  const ARITHMETIC = {\n    begin: /\\$?\\(\\(/,\n    end: /\\)\\)/,\n    contains: [\n      {\n        begin: /\\d+#[0-9a-f]+/,\n        className: \"number\"\n      },\n      hljs.NUMBER_MODE,\n      VAR\n    ]\n  };\n  const SH_LIKE_SHELLS = [\n    \"fish\",\n    \"bash\",\n    \"zsh\",\n    \"sh\",\n    \"csh\",\n    \"ksh\",\n    \"tcsh\",\n    \"dash\",\n    \"scsh\",\n  ];\n  const KNOWN_SHEBANG = hljs.SHEBANG({\n    binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n    relevance: 10\n  });\n  const FUNCTION = {\n    className: 'function',\n    begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n    returnBegin: true,\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n    relevance: 0\n  };\n\n  const KEYWORDS = [\n    \"if\",\n    \"then\",\n    \"else\",\n    \"elif\",\n    \"fi\",\n    \"for\",\n    \"while\",\n    \"until\",\n    \"in\",\n    \"do\",\n    \"done\",\n    \"case\",\n    \"esac\",\n    \"function\",\n    \"select\"\n  ];\n\n  const LITERALS = [\n    \"true\",\n    \"false\"\n  ];\n\n  // to consume paths to prevent keyword matches inside them\n  const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n  // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n  const SHELL_BUILT_INS = [\n    \"break\",\n    \"cd\",\n    \"continue\",\n    \"eval\",\n    \"exec\",\n    \"exit\",\n    \"export\",\n    \"getopts\",\n    \"hash\",\n    \"pwd\",\n    \"readonly\",\n    \"return\",\n    \"shift\",\n    \"test\",\n    \"times\",\n    \"trap\",\n    \"umask\",\n    \"unset\"\n  ];\n\n  const BASH_BUILT_INS = [\n    \"alias\",\n    \"bind\",\n    \"builtin\",\n    \"caller\",\n    \"command\",\n    \"declare\",\n    \"echo\",\n    \"enable\",\n    \"help\",\n    \"let\",\n    \"local\",\n    \"logout\",\n    \"mapfile\",\n    \"printf\",\n    \"read\",\n    \"readarray\",\n    \"source\",\n    \"type\",\n    \"typeset\",\n    \"ulimit\",\n    \"unalias\"\n  ];\n\n  const ZSH_BUILT_INS = [\n    \"autoload\",\n    \"bg\",\n    \"bindkey\",\n    \"bye\",\n    \"cap\",\n    \"chdir\",\n    \"clone\",\n    \"comparguments\",\n    \"compcall\",\n    \"compctl\",\n    \"compdescribe\",\n    \"compfiles\",\n    \"compgroups\",\n    \"compquote\",\n    \"comptags\",\n    \"comptry\",\n    \"compvalues\",\n    \"dirs\",\n    \"disable\",\n    \"disown\",\n    \"echotc\",\n    \"echoti\",\n    \"emulate\",\n    \"fc\",\n    \"fg\",\n    \"float\",\n    \"functions\",\n    \"getcap\",\n    \"getln\",\n    \"history\",\n    \"integer\",\n    \"jobs\",\n    \"kill\",\n    \"limit\",\n    \"log\",\n    \"noglob\",\n    \"popd\",\n    \"print\",\n    \"pushd\",\n    \"pushln\",\n    \"rehash\",\n    \"sched\",\n    \"setcap\",\n    \"setopt\",\n    \"stat\",\n    \"suspend\",\n    \"ttyctl\",\n    \"unfunction\",\n    \"unhash\",\n    \"unlimit\",\n    \"unsetopt\",\n    \"vared\",\n    \"wait\",\n    \"whence\",\n    \"where\",\n    \"which\",\n    \"zcompile\",\n    \"zformat\",\n    \"zftp\",\n    \"zle\",\n    \"zmodload\",\n    \"zparseopts\",\n    \"zprof\",\n    \"zpty\",\n    \"zregexparse\",\n    \"zsocket\",\n    \"zstyle\",\n    \"ztcp\"\n  ];\n\n  const GNU_CORE_UTILS = [\n    \"chcon\",\n    \"chgrp\",\n    \"chown\",\n    \"chmod\",\n    \"cp\",\n    \"dd\",\n    \"df\",\n    \"dir\",\n    \"dircolors\",\n    \"ln\",\n    \"ls\",\n    \"mkdir\",\n    \"mkfifo\",\n    \"mknod\",\n    \"mktemp\",\n    \"mv\",\n    \"realpath\",\n    \"rm\",\n    \"rmdir\",\n    \"shred\",\n    \"sync\",\n    \"touch\",\n    \"truncate\",\n    \"vdir\",\n    \"b2sum\",\n    \"base32\",\n    \"base64\",\n    \"cat\",\n    \"cksum\",\n    \"comm\",\n    \"csplit\",\n    \"cut\",\n    \"expand\",\n    \"fmt\",\n    \"fold\",\n    \"head\",\n    \"join\",\n    \"md5sum\",\n    \"nl\",\n    \"numfmt\",\n    \"od\",\n    \"paste\",\n    \"ptx\",\n    \"pr\",\n    \"sha1sum\",\n    \"sha224sum\",\n    \"sha256sum\",\n    \"sha384sum\",\n    \"sha512sum\",\n    \"shuf\",\n    \"sort\",\n    \"split\",\n    \"sum\",\n    \"tac\",\n    \"tail\",\n    \"tr\",\n    \"tsort\",\n    \"unexpand\",\n    \"uniq\",\n    \"wc\",\n    \"arch\",\n    \"basename\",\n    \"chroot\",\n    \"date\",\n    \"dirname\",\n    \"du\",\n    \"echo\",\n    \"env\",\n    \"expr\",\n    \"factor\",\n    // \"false\", // keyword literal already\n    \"groups\",\n    \"hostid\",\n    \"id\",\n    \"link\",\n    \"logname\",\n    \"nice\",\n    \"nohup\",\n    \"nproc\",\n    \"pathchk\",\n    \"pinky\",\n    \"printenv\",\n    \"printf\",\n    \"pwd\",\n    \"readlink\",\n    \"runcon\",\n    \"seq\",\n    \"sleep\",\n    \"stat\",\n    \"stdbuf\",\n    \"stty\",\n    \"tee\",\n    \"test\",\n    \"timeout\",\n    // \"true\", // keyword literal already\n    \"tty\",\n    \"uname\",\n    \"unlink\",\n    \"uptime\",\n    \"users\",\n    \"who\",\n    \"whoami\",\n    \"yes\"\n  ];\n\n  return {\n    name: 'Bash',\n    aliases: [ 'sh' ],\n    keywords: {\n      $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: [\n        ...SHELL_BUILT_INS,\n        ...BASH_BUILT_INS,\n        // Shell modifiers\n        \"set\",\n        \"shopt\",\n        ...ZSH_BUILT_INS,\n        ...GNU_CORE_UTILS\n      ]\n    },\n    contains: [\n      KNOWN_SHEBANG, // to catch known shells and boost relevancy\n      hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n      FUNCTION,\n      ARITHMETIC,\n      hljs.HASH_COMMENT_MODE,\n      HERE_DOC,\n      PATH_MODE,\n      QUOTE_STRING,\n      ESCAPED_QUOTE,\n      APOS_STRING,\n      ESCAPED_APOS,\n      VAR\n    ]\n  };\n}\n\nexport { bash as default };\n", "/*\nLanguage: C\nCategory: common, system\nWebsite: https://en.wikipedia.org/wiki/C_(programming_language)\n*/\n\n/** @type LanguageFn */\nfunction c(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n\n  const TYPES = {\n    className: 'type',\n    variants: [\n      { begin: '\\\\b[a-z\\\\d_]*_t\\\\b' },\n      { match: /\\batomic_[a-z]{3,6}\\b/ }\n    ]\n\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + \"|.)\",\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  const C_KEYWORDS = [\n    \"asm\",\n    \"auto\",\n    \"break\",\n    \"case\",\n    \"continue\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"for\",\n    \"fortran\",\n    \"goto\",\n    \"if\",\n    \"inline\",\n    \"register\",\n    \"restrict\",\n    \"return\",\n    \"sizeof\",\n    \"struct\",\n    \"switch\",\n    \"typedef\",\n    \"union\",\n    \"volatile\",\n    \"while\",\n    \"_Alignas\",\n    \"_Alignof\",\n    \"_Atomic\",\n    \"_Generic\",\n    \"_Noreturn\",\n    \"_Static_assert\",\n    \"_Thread_local\",\n    // aliases\n    \"alignas\",\n    \"alignof\",\n    \"noreturn\",\n    \"static_assert\",\n    \"thread_local\",\n    // not a C keyword but is, for all intents and purposes, treated exactly like one.\n    \"_Pragma\"\n  ];\n\n  const C_TYPES = [\n    \"float\",\n    \"double\",\n    \"signed\",\n    \"unsigned\",\n    \"int\",\n    \"short\",\n    \"long\",\n    \"char\",\n    \"void\",\n    \"_Bool\",\n    \"_Complex\",\n    \"_Imaginary\",\n    \"_Decimal32\",\n    \"_Decimal64\",\n    \"_Decimal128\",\n    // modifiers\n    \"const\",\n    \"static\",\n    // aliases\n    \"complex\",\n    \"bool\",\n    \"imaginary\"\n  ];\n\n  const KEYWORDS = {\n    keyword: C_KEYWORDS,\n    type: C_TYPES,\n    literal: 'true false NULL',\n    // TODO: apply hinting work similar to what was done in cpp.js\n    built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream '\n      + 'auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set '\n      + 'unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos '\n      + 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp '\n      + 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper '\n      + 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow '\n      + 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp '\n      + 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan '\n      + 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',\n  };\n\n  const EXPRESSION_CONTAINS = [\n    PREPROCESSOR,\n    TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ hljs.inherit(TITLE_MODE, { className: \"title.function\" }) ],\n        relevance: 0\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              TYPES\n            ]\n          }\n        ]\n      },\n      TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: \"C\",\n    aliases: [ 'h' ],\n    keywords: KEYWORDS,\n    // Until differentiations are added between `c` and `cpp`, `c` will\n    // not be auto-detected to avoid auto-detect conflicts between C and C++\n    disableAutodetect: true,\n    illegal: '</',\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: KEYWORDS\n        },\n        {\n          className: 'class',\n          beginKeywords: 'enum class struct union',\n          end: /[{;:<>=]/,\n          contains: [\n            { beginKeywords: \"final class struct\" },\n            hljs.TITLE_MODE\n          ]\n        }\n      ]),\n    exports: {\n      preprocessor: PREPROCESSOR,\n      strings: STRINGS,\n      keywords: KEYWORDS\n    }\n  };\n}\n\nexport { c as default };\n", "/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\nexport { cpp as default };\n", "/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n  const BUILT_IN_KEYWORDS = [\n    'bool',\n    'byte',\n    'char',\n    'decimal',\n    'delegate',\n    'double',\n    'dynamic',\n    'enum',\n    'float',\n    'int',\n    'long',\n    'nint',\n    'nuint',\n    'object',\n    'sbyte',\n    'short',\n    'string',\n    'ulong',\n    'uint',\n    'ushort'\n  ];\n  const FUNCTION_MODIFIERS = [\n    'public',\n    'private',\n    'protected',\n    'static',\n    'internal',\n    'protected',\n    'abstract',\n    'async',\n    'extern',\n    'override',\n    'unsafe',\n    'virtual',\n    'new',\n    'sealed',\n    'partial'\n  ];\n  const LITERAL_KEYWORDS = [\n    'default',\n    'false',\n    'null',\n    'true'\n  ];\n  const NORMAL_KEYWORDS = [\n    'abstract',\n    'as',\n    'base',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'const',\n    'continue',\n    'do',\n    'else',\n    'event',\n    'explicit',\n    'extern',\n    'finally',\n    'fixed',\n    'for',\n    'foreach',\n    'goto',\n    'if',\n    'implicit',\n    'in',\n    'interface',\n    'internal',\n    'is',\n    'lock',\n    'namespace',\n    'new',\n    'operator',\n    'out',\n    'override',\n    'params',\n    'private',\n    'protected',\n    'public',\n    'readonly',\n    'record',\n    'ref',\n    'return',\n    'scoped',\n    'sealed',\n    'sizeof',\n    'stackalloc',\n    'static',\n    'struct',\n    'switch',\n    'this',\n    'throw',\n    'try',\n    'typeof',\n    'unchecked',\n    'unsafe',\n    'using',\n    'virtual',\n    'void',\n    'volatile',\n    'while'\n  ];\n  const CONTEXTUAL_KEYWORDS = [\n    'add',\n    'alias',\n    'and',\n    'ascending',\n    'async',\n    'await',\n    'by',\n    'descending',\n    'equals',\n    'from',\n    'get',\n    'global',\n    'group',\n    'init',\n    'into',\n    'join',\n    'let',\n    'nameof',\n    'not',\n    'notnull',\n    'on',\n    'or',\n    'orderby',\n    'partial',\n    'remove',\n    'select',\n    'set',\n    'unmanaged',\n    'value|0',\n    'var',\n    'when',\n    'where',\n    'with',\n    'yield'\n  ];\n\n  const KEYWORDS = {\n    keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n    built_in: BUILT_IN_KEYWORDS,\n    literal: LITERAL_KEYWORDS\n  };\n  const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n  const VERBATIM_STRING = {\n    className: 'string',\n    begin: '@\"',\n    end: '\"',\n    contains: [ { begin: '\"\"' } ]\n  };\n  const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS\n  };\n  const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n  const INTERPOLATED_STRING = {\n    className: 'string',\n    begin: /\\$\"/,\n    end: '\"',\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      hljs.BACKSLASH_ESCAPE,\n      SUBST_NO_LF\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING = {\n    className: 'string',\n    begin: /\\$@\"/,\n    end: '\"',\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST_NO_LF\n    ]\n  });\n  SUBST.contains = [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.C_BLOCK_COMMENT_MODE\n  ];\n  SUBST_NO_LF.contains = [\n    INTERPOLATED_VERBATIM_STRING_NO_LF,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING_NO_LF,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n  ];\n  const STRING = { variants: [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ] };\n\n  const GENERIC_MODIFIER = {\n    begin: \"<\",\n    end: \">\",\n    contains: [\n      { beginKeywords: \"in out\" },\n      TITLE_MODE\n    ]\n  };\n  const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n  const AT_IDENTIFIER = {\n    // prevents expressions like `@class` from incorrect flagging\n    // `class` as a keyword\n    begin: \"@\" + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  return {\n    name: 'C#',\n    aliases: [\n      'cs',\n      'c#'\n    ],\n    keywords: KEYWORDS,\n    illegal: /::/,\n    contains: [\n      hljs.COMMENT(\n        '///',\n        '$',\n        {\n          returnBegin: true,\n          contains: [\n            {\n              className: 'doctag',\n              variants: [\n                {\n                  begin: '///',\n                  relevance: 0\n                },\n                { begin: '<!--|-->' },\n                {\n                  begin: '</?',\n                  end: '>'\n                }\n              ]\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$',\n        keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n      },\n      STRING,\n      NUMBERS,\n      {\n        beginKeywords: 'class interface',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:,]/,\n        contains: [\n          { beginKeywords: \"where class\" },\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'record',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // [Attributes(\"\")]\n        className: 'meta',\n        begin: '^\\\\s*\\\\[(?=[\\\\w])',\n        excludeBegin: true,\n        end: '\\\\]',\n        excludeEnd: true,\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/\n          }\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new return throw await else',\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n        returnBegin: true,\n        end: /\\s*[{;=]/,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          // prevents these from being highlighted `title`\n          {\n            beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n            relevance: 0\n          },\n          {\n            begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n            returnBegin: true,\n            contains: [\n              hljs.TITLE_MODE,\n              GENERIC_MODIFIER\n            ],\n            relevance: 0\n          },\n          { match: /\\(\\)/ },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              STRING,\n              NUMBERS,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      AT_IDENTIFIER\n    ]\n  };\n}\n\nexport { csharp as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n  const regex = hljs.regex;\n  const modes = MODES(hljs);\n  const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n  const AT_MODIFIERS = \"and or not only\";\n  const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const STRINGS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ];\n\n  return {\n    name: 'CSS',\n    case_insensitive: true,\n    illegal: /[=|'\\$]/,\n    keywords: { keyframePosition: \"from to\" },\n    classNameAliases: {\n      // for visual continuity with `tag {}` and because we\n      // don't have a great class for this?\n      keyframePosition: \"selector-tag\" },\n    contains: [\n      modes.BLOCK_COMMENT,\n      VENDOR_PREFIX,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: /#[A-Za-z0-9_-]+/,\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.' + IDENT_RE,\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        variants: [\n          { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n          { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n        ]\n      },\n      // we may actually need this (12/2020)\n      // { // pseudo-selector params\n      //   begin: /\\(/,\n      //   end: /\\)/,\n      //   contains: [ hljs.CSS_NUMBER_MODE ]\n      // },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      // attribute values\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        contains: [\n          modes.BLOCK_COMMENT,\n          modes.HEXCOLOR,\n          modes.IMPORTANT,\n          modes.CSS_NUMBER_MODE,\n          ...STRINGS,\n          // needed to highlight these as strings and to avoid issues with\n          // illegal characters that might be inside urls that would tigger the\n          // languages illegal stack\n          {\n            begin: /(url|data-uri)\\(/,\n            end: /\\)/,\n            relevance: 0, // from keywords\n            keywords: { built_in: \"url data-uri\" },\n            contains: [\n              ...STRINGS,\n              {\n                className: \"string\",\n                // any character other than `)` as in `url()` will be the start\n                // of a string, which ends with `)` (from the parent mode)\n                begin: /[^)]/,\n                endsWithParent: true,\n                excludeEnd: true\n              }\n            ]\n          },\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      {\n        begin: regex.lookahead(/@/),\n        end: '[{;]',\n        relevance: 0,\n        illegal: /:/, // break on Less variables @var: ...\n        contains: [\n          {\n            className: 'keyword',\n            begin: AT_PROPERTY_RE\n          },\n          {\n            begin: /\\s/,\n            endsWithParent: true,\n            excludeEnd: true,\n            relevance: 0,\n            keywords: {\n              $pattern: /[a-z-]+/,\n              keyword: AT_MODIFIERS,\n              attribute: MEDIA_FEATURES.join(\" \")\n            },\n            contains: [\n              {\n                begin: /[a-z-]+(?=:)/,\n                className: \"attribute\"\n              },\n              ...STRINGS,\n              modes.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n      }\n    ]\n  };\n}\n\nexport { css as default };\n", "/*\nLanguage: Diff\nDescription: Unified and context diff\nAuthor: Vasily Polovnyov <vast@whiteants.net>\nWebsite: https://www.gnu.org/software/diffutils/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction diff(hljs) {\n  const regex = hljs.regex;\n  return {\n    name: 'Diff',\n    aliases: [ 'patch' ],\n    contains: [\n      {\n        className: 'meta',\n        relevance: 10,\n        match: regex.either(\n          /^@@ +-\\d+,\\d+ +\\+\\d+,\\d+ +@@/,\n          /^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/,\n          /^--- +\\d+,\\d+ +----$/\n        )\n      },\n      {\n        className: 'comment',\n        variants: [\n          {\n            begin: regex.either(\n              /Index: /,\n              /^index/,\n              /={3,}/,\n              /^-{3}/,\n              /^\\*{3} /,\n              /^\\+{3}/,\n              /^diff --git/\n            ),\n            end: /$/\n          },\n          { match: /^\\*{15}$/ }\n        ]\n      },\n      {\n        className: 'addition',\n        begin: /^\\+/,\n        end: /$/\n      },\n      {\n        className: 'deletion',\n        begin: /^-/,\n        end: /$/\n      },\n      {\n        className: 'addition',\n        begin: /^!/,\n        end: /$/\n      }\n    ]\n  };\n}\n\nexport { diff as default };\n", "/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"iota\",\n    \"nil\"\n  ];\n  const BUILT_INS = [\n    \"append\",\n    \"cap\",\n    \"close\",\n    \"complex\",\n    \"copy\",\n    \"imag\",\n    \"len\",\n    \"make\",\n    \"new\",\n    \"panic\",\n    \"print\",\n    \"println\",\n    \"real\",\n    \"recover\",\n    \"delete\"\n  ];\n  const TYPES = [\n    \"bool\",\n    \"byte\",\n    \"complex64\",\n    \"complex128\",\n    \"error\",\n    \"float32\",\n    \"float64\",\n    \"int8\",\n    \"int16\",\n    \"int32\",\n    \"int64\",\n    \"string\",\n    \"uint8\",\n    \"uint16\",\n    \"uint32\",\n    \"uint64\",\n    \"int\",\n    \"uint\",\n    \"uintptr\",\n    \"rune\"\n  ];\n  const KWS = [\n    \"break\",\n    \"case\",\n    \"chan\",\n    \"const\",\n    \"continue\",\n    \"default\",\n    \"defer\",\n    \"else\",\n    \"fallthrough\",\n    \"for\",\n    \"func\",\n    \"go\",\n    \"goto\",\n    \"if\",\n    \"import\",\n    \"interface\",\n    \"map\",\n    \"package\",\n    \"range\",\n    \"return\",\n    \"select\",\n    \"struct\",\n    \"switch\",\n    \"type\",\n    \"var\",\n  ];\n  const KEYWORDS = {\n    keyword: KWS,\n    type: TYPES,\n    literal: LITERALS,\n    built_in: BUILT_INS\n  };\n  return {\n    name: 'Go',\n    aliases: [ 'golang' ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'string',\n        variants: [\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            begin: '`',\n            end: '`'\n          }\n        ]\n      },\n      {\n        className: 'number',\n        variants: [\n          {\n            begin: hljs.C_NUMBER_RE + '[i]',\n            relevance: 1\n          },\n          hljs.C_NUMBER_MODE\n        ]\n      },\n      { begin: /:=/ // relevance booster\n      },\n      {\n        className: 'function',\n        beginKeywords: 'func',\n        end: '\\\\s*(\\\\{|$)',\n        excludeEnd: true,\n        contains: [\n          hljs.TITLE_MODE,\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            illegal: /[\"']/\n          }\n        ]\n      }\n    ]\n  };\n}\n\nexport { go as default };\n", "/*\n Language: GraphQL\n Author: John Foster (GH jf990), and others\n Description: GraphQL is a query language for APIs\n Category: web, common\n*/\n\n/** @type LanguageFn */\nfunction graphql(hljs) {\n  const regex = hljs.regex;\n  const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\n  return {\n    name: \"GraphQL\",\n    aliases: [ \"gql\" ],\n    case_insensitive: true,\n    disableAutodetect: false,\n    keywords: {\n      keyword: [\n        \"query\",\n        \"mutation\",\n        \"subscription\",\n        \"type\",\n        \"input\",\n        \"schema\",\n        \"directive\",\n        \"interface\",\n        \"union\",\n        \"scalar\",\n        \"fragment\",\n        \"enum\",\n        \"on\"\n      ],\n      literal: [\n        \"true\",\n        \"false\",\n        \"null\"\n      ]\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      {\n        scope: \"punctuation\",\n        match: /[.]{3}/,\n        relevance: 0\n      },\n      {\n        scope: \"punctuation\",\n        begin: /[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,\n        relevance: 0\n      },\n      {\n        scope: \"variable\",\n        begin: /\\$/,\n        end: /\\W/,\n        excludeEnd: true,\n        relevance: 0\n      },\n      {\n        scope: \"meta\",\n        match: /@\\w+/,\n        excludeEnd: true\n      },\n      {\n        scope: \"symbol\",\n        begin: regex.concat(GQL_NAME, regex.lookahead(/\\s*:/)),\n        relevance: 0\n      }\n    ],\n    illegal: [\n      /[;<']/,\n      /BEGIN/\n    ]\n  };\n}\n\nexport { graphql as default };\n", "/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\nfunction ini(hljs) {\n  const regex = hljs.regex;\n  const NUMBERS = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      { begin: /([+-]+)?[\\d]+_[\\d_]+/ },\n      { begin: hljs.NUMBER_RE }\n    ]\n  };\n  const COMMENTS = hljs.COMMENT();\n  COMMENTS.variants = [\n    {\n      begin: /;/,\n      end: /$/\n    },\n    {\n      begin: /#/,\n      end: /$/\n    }\n  ];\n  const VARIABLES = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$[\\w\\d\"][\\w\\d_]*/ },\n      { begin: /\\$\\{(.*?)\\}/ }\n    ]\n  };\n  const LITERALS = {\n    className: 'literal',\n    begin: /\\bon|off|true|false|yes|no\\b/\n  };\n  const STRINGS = {\n    className: \"string\",\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: \"'''\",\n        end: \"'''\",\n        relevance: 10\n      },\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"',\n        relevance: 10\n      },\n      {\n        begin: '\"',\n        end: '\"'\n      },\n      {\n        begin: \"'\",\n        end: \"'\"\n      }\n    ]\n  };\n  const ARRAY = {\n    begin: /\\[/,\n    end: /\\]/,\n    contains: [\n      COMMENTS,\n      LITERALS,\n      VARIABLES,\n      STRINGS,\n      NUMBERS,\n      'self'\n    ],\n    relevance: 0\n  };\n\n  const BARE_KEY = /[A-Za-z0-9_-]+/;\n  const QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n  const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n  const ANY_KEY = regex.either(\n    BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\n  );\n  const DOTTED_KEY = regex.concat(\n    ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*',\n    regex.lookahead(/\\s*=\\s*[^#\\s]/)\n  );\n\n  return {\n    name: 'TOML, also INI',\n    aliases: [ 'toml' ],\n    case_insensitive: true,\n    illegal: /\\S/,\n    contains: [\n      COMMENTS,\n      {\n        className: 'section',\n        begin: /\\[+/,\n        end: /\\]+/\n      },\n      {\n        begin: DOTTED_KEY,\n        className: 'attr',\n        starts: {\n          end: /$/,\n          contains: [\n            COMMENTS,\n            ARRAY,\n            LITERALS,\n            VARIABLES,\n            STRINGS,\n            NUMBERS\n          ]\n        }\n      }\n    ]\n  };\n}\n\nexport { ini as default };\n", "// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n  if (depth === -1) return \"\";\n\n  return re.replace(substitution, _ => {\n    return recurRegex(re, substitution, depth - 1);\n  });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n  const regex = hljs.regex;\n  const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n  const GENERIC_IDENT_RE = JAVA_IDENT_RE\n    + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n  const MAIN_KEYWORDS = [\n    'synchronized',\n    'abstract',\n    'private',\n    'var',\n    'static',\n    'if',\n    'const ',\n    'for',\n    'while',\n    'strictfp',\n    'finally',\n    'protected',\n    'import',\n    'native',\n    'final',\n    'void',\n    'enum',\n    'else',\n    'break',\n    'transient',\n    'catch',\n    'instanceof',\n    'volatile',\n    'case',\n    'assert',\n    'package',\n    'default',\n    'public',\n    'try',\n    'switch',\n    'continue',\n    'throws',\n    'protected',\n    'public',\n    'private',\n    'module',\n    'requires',\n    'exports',\n    'do',\n    'sealed',\n    'yield',\n    'permits'\n  ];\n\n  const BUILT_INS = [\n    'super',\n    'this'\n  ];\n\n  const LITERALS = [\n    'false',\n    'true',\n    'null'\n  ];\n\n  const TYPES = [\n    'char',\n    'boolean',\n    'long',\n    'float',\n    'int',\n    'byte',\n    'short',\n    'double'\n  ];\n\n  const KEYWORDS = {\n    keyword: MAIN_KEYWORDS,\n    literal: LITERALS,\n    type: TYPES,\n    built_in: BUILT_INS\n  };\n\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + JAVA_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ \"self\" ] // allow nested () inside our annotation\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    relevance: 0,\n    contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n    endsParent: true\n  };\n\n  return {\n    name: 'Java',\n    aliases: [ 'jsp' ],\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/,\n              relevance: 0\n            },\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      // relevance boost\n      {\n        begin: /import java\\.[a-z]+\\./,\n        keywords: \"import\",\n        relevance: 2\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        begin: /\"\"\"/,\n        end: /\"\"\"/,\n        className: \"string\",\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        match: [\n          /\\b(?:class|interface|enum|extends|implements|new)/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        // Exceptions for hyphenated keywords\n        match: /non-sealed/,\n        scope: \"keyword\"\n      },\n      {\n        begin: [\n          regex.concat(/(?!else)/, JAVA_IDENT_RE),\n          /\\s+/,\n          JAVA_IDENT_RE,\n          /\\s+/,\n          /=(?!=)/\n        ],\n        className: {\n          1: \"type\",\n          3: \"variable\",\n          5: \"operator\"\n        }\n      },\n      {\n        begin: [\n          /record/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        },\n        contains: [\n          PARAMS,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new throw return else',\n        relevance: 0\n      },\n      {\n        begin: [\n          '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s*(?=\\()/\n        ],\n        className: { 2: \"title.function\" },\n        keywords: KEYWORDS,\n        contains: [\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              ANNOTATION,\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              NUMERIC,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      NUMERIC,\n      ANNOTATION\n    ]\n  };\n}\n\nexport { java as default };\n", "const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: 'gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ]),\n      IDENT_RE$1, regex.lookahead(/\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        className: 'attr',\n        begin: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\nexport { javascript as default };\n", "/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n  const ATTRIBUTE = {\n    className: 'attr',\n    begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n    relevance: 1.01\n  };\n  const PUNCTUATION = {\n    match: /[{}[\\],:]/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\"\n  ];\n  // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n  // - to use the very tight `illegal: \\S` rule later to flag any other character\n  // - as illegal indicating that despite looking like JSON we do not truly have\n  // - JSON and thus improve false-positively greatly since JSON will try and claim\n  // - all sorts of JSON looking stuff\n  const LITERALS_MODE = {\n    scope: \"literal\",\n    beginKeywords: LITERALS.join(\" \"),\n  };\n\n  return {\n    name: 'JSON',\n    keywords:{\n      literal: LITERALS,\n    },\n    contains: [\n      ATTRIBUTE,\n      PUNCTUATION,\n      hljs.QUOTE_STRING_MODE,\n      LITERALS_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ],\n    illegal: '\\\\S'\n  };\n}\n\nexport { json as default };\n", "// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\n Language: Kotlin\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\n Author: Sergey Mashkov <cy6erGn0m@gmail.com>\n Website: https://kotlinlang.org\n Category: common\n */\n\n\nfunction kotlin(hljs) {\n  const KEYWORDS = {\n    keyword:\n      'abstract as val var vararg get set class object open private protected public noinline '\n      + 'crossinline dynamic final enum if else do while for when throw try catch finally '\n      + 'import package is in fun override companion reified inline lateinit init '\n      + 'interface annotation data sealed internal infix operator out by constructor super '\n      + 'tailrec where const inner suspend typealias external expect actual',\n    built_in:\n      'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n    literal:\n      'true false null'\n  };\n  const KEYWORDS_WITH_LABEL = {\n    className: 'keyword',\n    begin: /\\b(break|continue|return|this)\\b/,\n    starts: { contains: [\n      {\n        className: 'symbol',\n        begin: /@\\w+/\n      }\n    ] }\n  };\n  const LABEL = {\n    className: 'symbol',\n    begin: hljs.UNDERSCORE_IDENT_RE + '@'\n  };\n\n  // for string templates\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [ hljs.C_NUMBER_MODE ]\n  };\n  const VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n  };\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"(?=[^\"])',\n        contains: [\n          VARIABLE,\n          SUBST\n        ]\n      },\n      // Can't use built-in modes easily, as we want to use STRING in the meta\n      // context as 'meta-string' and there's no syntax to remove explicitly set\n      // classNames in built-in modes.\n      {\n        begin: '\\'',\n        end: '\\'',\n        illegal: /\\n/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: /\\n/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          VARIABLE,\n          SUBST\n        ]\n      }\n    ]\n  };\n  SUBST.contains.push(STRING);\n\n  const ANNOTATION_USE_SITE = {\n    className: 'meta',\n    begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n  };\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          hljs.inherit(STRING, { className: 'string' }),\n          \"self\"\n        ]\n      }\n    ]\n  };\n\n  // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n  // According to the doc above, the number mode of kotlin is the same as java 8,\n  // so the code below is copied from java.js\n  const KOTLIN_NUMBER_MODE = NUMERIC;\n  const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n    '/\\\\*', '\\\\*/',\n    { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\n  );\n  const KOTLIN_PAREN_TYPE = { variants: [\n    {\n      className: 'type',\n      begin: hljs.UNDERSCORE_IDENT_RE\n    },\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      contains: [] // defined later\n    }\n  ] };\n  const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n  KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n  KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n  return {\n    name: 'Kotlin',\n    aliases: [\n      'kt',\n      'kts'\n    ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      KOTLIN_NESTED_COMMENT,\n      KEYWORDS_WITH_LABEL,\n      LABEL,\n      ANNOTATION_USE_SITE,\n      ANNOTATION,\n      {\n        className: 'function',\n        beginKeywords: 'fun',\n        end: '[(]|$',\n        returnBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        relevance: 5,\n        contains: [\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n            returnBegin: true,\n            relevance: 0,\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n          },\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            keywords: 'reified',\n            relevance: 0\n          },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              {\n                begin: /:/,\n                end: /[=,\\/]/,\n                endsWithParent: true,\n                contains: [\n                  KOTLIN_PAREN_TYPE,\n                  hljs.C_LINE_COMMENT_MODE,\n                  KOTLIN_NESTED_COMMENT\n                ],\n                relevance: 0\n              },\n              hljs.C_LINE_COMMENT_MODE,\n              KOTLIN_NESTED_COMMENT,\n              ANNOTATION_USE_SITE,\n              ANNOTATION,\n              STRING,\n              hljs.C_NUMBER_MODE\n            ]\n          },\n          KOTLIN_NESTED_COMMENT\n        ]\n      },\n      {\n        begin: [\n          /class|interface|trait/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        beginScope: {\n          3: \"title.class\"\n        },\n        keywords: 'class interface trait',\n        end: /[:\\{(]|$/,\n        excludeEnd: true,\n        illegal: 'extends implements',\n        contains: [\n          { beginKeywords: 'public protected internal private constructor' },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            excludeBegin: true,\n            excludeEnd: true,\n            relevance: 0\n          },\n          {\n            className: 'type',\n            begin: /[,:]\\s*/,\n            end: /[<\\(,){\\s]|$/,\n            excludeBegin: true,\n            returnEnd: true\n          },\n          ANNOTATION_USE_SITE,\n          ANNOTATION\n        ]\n      },\n      STRING,\n      {\n        className: 'meta',\n        begin: \"^#!/usr/bin/env\",\n        end: '$',\n        illegal: '\\n'\n      },\n      KOTLIN_NUMBER_MODE\n    ]\n  };\n}\n\nexport { kotlin as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n// some grammars use them all as a single group\nconst PSEUDO_SELECTORS = PSEUDO_CLASSES.concat(PSEUDO_ELEMENTS);\n\n/*\nLanguage: Less\nDescription: It's CSS, with just a little more.\nAuthor:   Max Mikhailov <seven.phases.max@gmail.com>\nWebsite: http://lesscss.org\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction less(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_SELECTORS$1 = PSEUDO_SELECTORS;\n\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n  const INTERP_IDENT_RE = '(' + IDENT_RE + '|@\\\\{' + IDENT_RE + '\\\\})';\n\n  /* Generic Modes */\n\n  const RULES = []; const VALUE_MODES = []; // forward def. for recursive modes\n\n  const STRING_MODE = function(c) {\n    return {\n    // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n      className: 'string',\n      begin: '~?' + c + '.*?' + c\n    };\n  };\n\n  const IDENT_MODE = function(name, begin, relevance) {\n    return {\n      className: name,\n      begin: begin,\n      relevance: relevance\n    };\n  };\n\n  const AT_KEYWORDS = {\n    $pattern: /[a-z-]+/,\n    keyword: AT_MODIFIERS,\n    attribute: MEDIA_FEATURES.join(\" \")\n  };\n\n  const PARENS_MODE = {\n    // used only to properly balance nested parens inside mixin call, def. arg list\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: VALUE_MODES,\n    keywords: AT_KEYWORDS,\n    relevance: 0\n  };\n\n  // generic Less highlighter (used almost everywhere except selectors):\n  VALUE_MODES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING_MODE(\"'\"),\n    STRING_MODE('\"'),\n    modes.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n    {\n      begin: '(url|data-uri)\\\\(',\n      starts: {\n        className: 'string',\n        end: '[\\\\)\\\\n]',\n        excludeEnd: true\n      }\n    },\n    modes.HEXCOLOR,\n    PARENS_MODE,\n    IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\n    IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'),\n    IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n    { // @media features (it\u2019s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n      className: 'attribute',\n      begin: IDENT_RE + '\\\\s*:',\n      end: ':',\n      returnBegin: true,\n      excludeEnd: true\n    },\n    modes.IMPORTANT,\n    { beginKeywords: 'and not' },\n    modes.FUNCTION_DISPATCH\n  );\n\n  const VALUE_WITH_RULESETS = VALUE_MODES.concat({\n    begin: /\\{/,\n    end: /\\}/,\n    contains: RULES\n  });\n\n  const MIXIN_GUARD_MODE = {\n    beginKeywords: 'when',\n    endsWithParent: true,\n    contains: [ { beginKeywords: 'and not' } ].concat(VALUE_MODES) // using this form to override VALUE\u2019s 'function' match\n  };\n\n  /* Rule-Level Modes */\n\n  const RULE_MODE = {\n    begin: INTERP_IDENT_RE + '\\\\s*:',\n    returnBegin: true,\n    end: /[;}]/,\n    relevance: 0,\n    contains: [\n      { begin: /-(webkit|moz|ms|o)-/ },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b',\n        end: /(?=:)/,\n        starts: {\n          endsWithParent: true,\n          illegal: '[<=$]',\n          relevance: 0,\n          contains: VALUE_MODES\n        }\n      }\n    ]\n  };\n\n  const AT_RULE_MODE = {\n    className: 'keyword',\n    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n    starts: {\n      end: '[;{}]',\n      keywords: AT_KEYWORDS,\n      returnEnd: true,\n      contains: VALUE_MODES,\n      relevance: 0\n    }\n  };\n\n  // variable definitions and calls\n  const VAR_RULE_MODE = {\n    className: 'variable',\n    variants: [\n      // using more strict pattern for higher relevance to increase chances of Less detection.\n      // this is *the only* Less specific statement used in most of the sources, so...\n      // (we\u2019ll still often loose to the css-parser unless there's '//' comment,\n      // simply because 1 variable just can't beat 99 properties :)\n      {\n        begin: '@' + IDENT_RE + '\\\\s*:',\n        relevance: 15\n      },\n      { begin: '@' + IDENT_RE }\n    ],\n    starts: {\n      end: '[;}]',\n      returnEnd: true,\n      contains: VALUE_WITH_RULESETS\n    }\n  };\n\n  const SELECTOR_MODE = {\n    // first parse unambiguous selectors (i.e. those not starting with tag)\n    // then fall into the scary lookahead-discriminator variant.\n    // this mode also handles mixin definitions and calls\n    variants: [\n      {\n        begin: '[\\\\.#:&\\\\[>]',\n        end: '[;{}]' // mixin calls end with ';'\n      },\n      {\n        begin: INTERP_IDENT_RE,\n        end: /\\{/\n      }\n    ],\n    returnBegin: true,\n    returnEnd: true,\n    illegal: '[<=\\'$\"]',\n    relevance: 0,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      MIXIN_GUARD_MODE,\n      IDENT_MODE('keyword', 'all\\\\b'),\n      IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'), // otherwise it\u2019s identified as tag\n      \n      {\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        className: 'selector-tag'\n      },\n      modes.CSS_NUMBER_MODE,\n      IDENT_MODE('selector-tag', INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\n      IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-tag', '&', 0),\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')'\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        relevance: 0,\n        contains: VALUE_WITH_RULESETS\n      }, // argument list of parametric mixins\n      { begin: '!important' }, // eat !important after mixin call or it will be colored as tag\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n\n  const PSEUDO_SELECTOR_MODE = {\n    begin: IDENT_RE + ':(:)?' + `(${PSEUDO_SELECTORS$1.join('|')})`,\n    returnBegin: true,\n    contains: [ SELECTOR_MODE ]\n  };\n\n  RULES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    AT_RULE_MODE,\n    VAR_RULE_MODE,\n    PSEUDO_SELECTOR_MODE,\n    RULE_MODE,\n    SELECTOR_MODE,\n    MIXIN_GUARD_MODE,\n    modes.FUNCTION_DISPATCH\n  );\n\n  return {\n    name: 'Less',\n    case_insensitive: true,\n    illegal: '[=>\\'/<($\"]',\n    contains: RULES\n  };\n}\n\nexport { less as default };\n", "/*\nLanguage: Lua\nDescription: Lua is a powerful, efficient, lightweight, embeddable scripting language.\nAuthor: Andrew Fedorov <dmmdrs@mail.ru>\nCategory: common, scripting\nWebsite: https://www.lua.org\n*/\n\nfunction lua(hljs) {\n  const OPENING_LONG_BRACKET = '\\\\[=*\\\\[';\n  const CLOSING_LONG_BRACKET = '\\\\]=*\\\\]';\n  const LONG_BRACKETS = {\n    begin: OPENING_LONG_BRACKET,\n    end: CLOSING_LONG_BRACKET,\n    contains: [ 'self' ]\n  };\n  const COMMENTS = [\n    hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),\n    hljs.COMMENT(\n      '--' + OPENING_LONG_BRACKET,\n      CLOSING_LONG_BRACKET,\n      {\n        contains: [ LONG_BRACKETS ],\n        relevance: 10\n      }\n    )\n  ];\n  return {\n    name: 'Lua',\n    keywords: {\n      $pattern: hljs.UNDERSCORE_IDENT_RE,\n      literal: \"true false nil\",\n      keyword: \"and break do else elseif end for goto if in local not or repeat return then until while\",\n      built_in:\n        // Metatags and globals:\n        '_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len '\n        + '__gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert '\n        // Standard methods and properties:\n        + 'collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring '\n        + 'module next pairs pcall print rawequal rawget rawset require select setfenv '\n        + 'setmetatable tonumber tostring type unpack xpcall arg self '\n        // Library methods and properties (one line per library):\n        + 'coroutine resume yield status wrap create running debug getupvalue '\n        + 'debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv '\n        + 'io lines write close flush open output type read stderr stdin input stdout popen tmpfile '\n        + 'math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan '\n        + 'os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall '\n        + 'string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower '\n        + 'table setn insert getn foreachi maxn foreach concat sort remove'\n    },\n    contains: COMMENTS.concat([\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: '\\\\)',\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*' }),\n          {\n            className: 'params',\n            begin: '\\\\(',\n            endsWithParent: true,\n            contains: COMMENTS\n          }\n        ].concat(COMMENTS)\n      },\n      hljs.C_NUMBER_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: OPENING_LONG_BRACKET,\n        end: CLOSING_LONG_BRACKET,\n        contains: [ LONG_BRACKETS ],\n        relevance: 5\n      }\n    ])\n  };\n}\n\nexport { lua as default };\n", "/*\nLanguage: Makefile\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nContributors: Jo\u00EBl Porquet <joel@porquet.org>\nWebsite: https://www.gnu.org/software/make/manual/html_node/Introduction.html\nCategory: common\n*/\n\nfunction makefile(hljs) {\n  /* Variables: simple (eg $(var)) and special (eg $@) */\n  const VARIABLE = {\n    className: 'variable',\n    variants: [\n      {\n        begin: '\\\\$\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\)',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      { begin: /\\$[@%<?\\^\\+\\*]/ }\n    ]\n  };\n  /* Quoted string with variables inside */\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VARIABLE\n    ]\n  };\n  /* Function: $(func arg,...) */\n  const FUNC = {\n    className: 'variable',\n    begin: /\\$\\([\\w-]+\\s/,\n    end: /\\)/,\n    keywords: { built_in:\n        'subst patsubst strip findstring filter filter-out sort '\n        + 'word wordlist firstword lastword dir notdir suffix basename '\n        + 'addsuffix addprefix join wildcard realpath abspath error warning '\n        + 'shell origin flavor foreach if or and call eval file value' },\n    contains: [ VARIABLE ]\n  };\n  /* Variable assignment */\n  const ASSIGNMENT = { begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*(?=[:+?]?=)' };\n  /* Meta targets (.PHONY) */\n  const META = {\n    className: 'meta',\n    begin: /^\\.PHONY:/,\n    end: /$/,\n    keywords: {\n      $pattern: /[\\.\\w]+/,\n      keyword: '.PHONY'\n    }\n  };\n  /* Targets */\n  const TARGET = {\n    className: 'section',\n    begin: /^[^\\s]+:/,\n    end: /$/,\n    contains: [ VARIABLE ]\n  };\n  return {\n    name: 'Makefile',\n    aliases: [\n      'mk',\n      'mak',\n      'make',\n    ],\n    keywords: {\n      $pattern: /[\\w-]+/,\n      keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif '\n      + 'include -include sinclude override export unexport private vpath'\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      VARIABLE,\n      QUOTE_STRING,\n      FUNC,\n      ASSIGNMENT,\n      META,\n      TARGET\n    ]\n  };\n}\n\nexport { makefile as default };\n", "/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n  const regex = hljs.regex;\n  const INLINE_HTML = {\n    begin: /<\\/?[A-Za-z_]/,\n    end: '>',\n    subLanguage: 'xml',\n    relevance: 0\n  };\n  const HORIZONTAL_RULE = {\n    begin: '^[-\\\\*]{3,}',\n    end: '$'\n  };\n  const CODE = {\n    className: 'code',\n    variants: [\n      // TODO: fix to allow these to work with sublanguage also\n      { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n      { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n      // needed to allow markdown as a sublanguage to work\n      {\n        begin: '```',\n        end: '```+[ ]*$'\n      },\n      {\n        begin: '~~~',\n        end: '~~~+[ ]*$'\n      },\n      { begin: '`.+?`' },\n      {\n        begin: '(?=^( {4}|\\\\t))',\n        // use contains to gobble up multiple lines to allow the block to be whatever size\n        // but only have a single open/close tag vs one per line\n        contains: [\n          {\n            begin: '^( {4}|\\\\t)',\n            end: '(\\\\n)$'\n          }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n  const LIST = {\n    className: 'bullet',\n    begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n    end: '\\\\s+',\n    excludeEnd: true\n  };\n  const LINK_REFERENCE = {\n    begin: /^\\[[^\\n]+\\]:/,\n    returnBegin: true,\n    contains: [\n      {\n        className: 'symbol',\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'link',\n        begin: /:\\s*/,\n        end: /$/,\n        excludeBegin: true\n      }\n    ]\n  };\n  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n  const LINK = {\n    variants: [\n      // too much like nested array access in so many languages\n      // to have any real relevance\n      {\n        begin: /\\[.+?\\]\\[.*?\\]/,\n        relevance: 0\n      },\n      // popular internet URLs\n      {\n        begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n        relevance: 2\n      },\n      {\n        begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n        relevance: 2\n      },\n      // relative urls\n      {\n        begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n        relevance: 1\n      },\n      // whatever else, lower relevance (might not be a link at all)\n      {\n        begin: /\\[.*?\\]\\(.*?\\)/,\n        relevance: 0\n      }\n    ],\n    returnBegin: true,\n    contains: [\n      {\n        // empty strings for alt or link text\n        match: /\\[(?=\\])/ },\n      {\n        className: 'string',\n        relevance: 0,\n        begin: '\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        returnEnd: true\n      },\n      {\n        className: 'link',\n        relevance: 0,\n        begin: '\\\\]\\\\(',\n        end: '\\\\)',\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'symbol',\n        relevance: 0,\n        begin: '\\\\]\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n  const BOLD = {\n    className: 'strong',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /_{2}(?!\\s)/,\n        end: /_{2}/\n      },\n      {\n        begin: /\\*{2}(?!\\s)/,\n        end: /\\*{2}/\n      }\n    ]\n  };\n  const ITALIC = {\n    className: 'emphasis',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /\\*(?![*\\s])/,\n        end: /\\*/\n      },\n      {\n        begin: /_(?![_\\s])/,\n        end: /_/,\n        relevance: 0\n      }\n    ]\n  };\n\n  // 3 level deep nesting is not allowed because it would create confusion\n  // in cases like `***testing***` because where we don't know if the last\n  // `***` is starting a new bold/italic or finishing the last one\n  const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n  const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n  BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n  ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n  let CONTAINABLE = [\n    INLINE_HTML,\n    LINK\n  ];\n\n  [\n    BOLD,\n    ITALIC,\n    BOLD_WITHOUT_ITALIC,\n    ITALIC_WITHOUT_BOLD\n  ].forEach(m => {\n    m.contains = m.contains.concat(CONTAINABLE);\n  });\n\n  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n  const HEADER = {\n    className: 'section',\n    variants: [\n      {\n        begin: '^#{1,6}',\n        end: '$',\n        contains: CONTAINABLE\n      },\n      {\n        begin: '(?=^.+?\\\\n[=-]{2,}$)',\n        contains: [\n          { begin: '^[=-]*$' },\n          {\n            begin: '^',\n            end: \"\\\\n\",\n            contains: CONTAINABLE\n          }\n        ]\n      }\n    ]\n  };\n\n  const BLOCKQUOTE = {\n    className: 'quote',\n    begin: '^>\\\\s+',\n    contains: CONTAINABLE,\n    end: '$'\n  };\n\n  return {\n    name: 'Markdown',\n    aliases: [\n      'md',\n      'mkdown',\n      'mkd'\n    ],\n    contains: [\n      HEADER,\n      INLINE_HTML,\n      LIST,\n      BOLD,\n      ITALIC,\n      BLOCKQUOTE,\n      CODE,\n      HORIZONTAL_RULE,\n      LINK,\n      LINK_REFERENCE\n    ]\n  };\n}\n\nexport { markdown as default };\n", "/*\nLanguage: Objective-C\nAuthor: Valerii Hiora <valerii.hiora@gmail.com>\nContributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguy\u1EC5n <mxn@1ec5.org>\nWebsite: https://developer.apple.com/documentation/objectivec\nCategory: common\n*/\n\nfunction objectivec(hljs) {\n  const API_CLASS = {\n    className: 'built_in',\n    begin: '\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+'\n  };\n  const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;\n  const TYPES = [\n    \"int\",\n    \"float\",\n    \"char\",\n    \"unsigned\",\n    \"signed\",\n    \"short\",\n    \"long\",\n    \"double\",\n    \"wchar_t\",\n    \"unichar\",\n    \"void\",\n    \"bool\",\n    \"BOOL\",\n    \"id|0\",\n    \"_Bool\"\n  ];\n  const KWS = [\n    \"while\",\n    \"export\",\n    \"sizeof\",\n    \"typedef\",\n    \"const\",\n    \"struct\",\n    \"for\",\n    \"union\",\n    \"volatile\",\n    \"static\",\n    \"mutable\",\n    \"if\",\n    \"do\",\n    \"return\",\n    \"goto\",\n    \"enum\",\n    \"else\",\n    \"break\",\n    \"extern\",\n    \"asm\",\n    \"case\",\n    \"default\",\n    \"register\",\n    \"explicit\",\n    \"typename\",\n    \"switch\",\n    \"continue\",\n    \"inline\",\n    \"readonly\",\n    \"assign\",\n    \"readwrite\",\n    \"self\",\n    \"@synchronized\",\n    \"id\",\n    \"typeof\",\n    \"nonatomic\",\n    \"IBOutlet\",\n    \"IBAction\",\n    \"strong\",\n    \"weak\",\n    \"copy\",\n    \"in\",\n    \"out\",\n    \"inout\",\n    \"bycopy\",\n    \"byref\",\n    \"oneway\",\n    \"__strong\",\n    \"__weak\",\n    \"__block\",\n    \"__autoreleasing\",\n    \"@private\",\n    \"@protected\",\n    \"@public\",\n    \"@try\",\n    \"@property\",\n    \"@end\",\n    \"@throw\",\n    \"@catch\",\n    \"@finally\",\n    \"@autoreleasepool\",\n    \"@synthesize\",\n    \"@dynamic\",\n    \"@selector\",\n    \"@optional\",\n    \"@required\",\n    \"@encode\",\n    \"@package\",\n    \"@import\",\n    \"@defs\",\n    \"@compatibility_alias\",\n    \"__bridge\",\n    \"__bridge_transfer\",\n    \"__bridge_retained\",\n    \"__bridge_retain\",\n    \"__covariant\",\n    \"__contravariant\",\n    \"__kindof\",\n    \"_Nonnull\",\n    \"_Nullable\",\n    \"_Null_unspecified\",\n    \"__FUNCTION__\",\n    \"__PRETTY_FUNCTION__\",\n    \"__attribute__\",\n    \"getter\",\n    \"setter\",\n    \"retain\",\n    \"unsafe_unretained\",\n    \"nonnull\",\n    \"nullable\",\n    \"null_unspecified\",\n    \"null_resettable\",\n    \"class\",\n    \"instancetype\",\n    \"NS_DESIGNATED_INITIALIZER\",\n    \"NS_UNAVAILABLE\",\n    \"NS_REQUIRES_SUPER\",\n    \"NS_RETURNS_INNER_POINTER\",\n    \"NS_INLINE\",\n    \"NS_AVAILABLE\",\n    \"NS_DEPRECATED\",\n    \"NS_ENUM\",\n    \"NS_OPTIONS\",\n    \"NS_SWIFT_UNAVAILABLE\",\n    \"NS_ASSUME_NONNULL_BEGIN\",\n    \"NS_ASSUME_NONNULL_END\",\n    \"NS_REFINED_FOR_SWIFT\",\n    \"NS_SWIFT_NAME\",\n    \"NS_SWIFT_NOTHROW\",\n    \"NS_DURING\",\n    \"NS_HANDLER\",\n    \"NS_ENDHANDLER\",\n    \"NS_VALUERETURN\",\n    \"NS_VOIDRETURN\"\n  ];\n  const LITERALS = [\n    \"false\",\n    \"true\",\n    \"FALSE\",\n    \"TRUE\",\n    \"nil\",\n    \"YES\",\n    \"NO\",\n    \"NULL\"\n  ];\n  const BUILT_INS = [\n    \"dispatch_once_t\",\n    \"dispatch_queue_t\",\n    \"dispatch_sync\",\n    \"dispatch_async\",\n    \"dispatch_once\"\n  ];\n  const KEYWORDS = {\n    \"variable.language\": [\n      \"this\",\n      \"super\"\n    ],\n    $pattern: IDENTIFIER_RE,\n    keyword: KWS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    type: TYPES\n  };\n  const CLASS_KEYWORDS = {\n    $pattern: IDENTIFIER_RE,\n    keyword: [\n      \"@interface\",\n      \"@class\",\n      \"@protocol\",\n      \"@implementation\"\n    ]\n  };\n  return {\n    name: 'Objective-C',\n    aliases: [\n      'mm',\n      'objc',\n      'obj-c',\n      'obj-c++',\n      'objective-c++'\n    ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      API_CLASS,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      {\n        className: 'string',\n        variants: [\n          {\n            begin: '@\"',\n            end: '\"',\n            illegal: '\\\\n',\n            contains: [ hljs.BACKSLASH_ESCAPE ]\n          }\n        ]\n      },\n      {\n        className: 'meta',\n        begin: /#\\s*[a-z]+\\b/,\n        end: /$/,\n        keywords: { keyword:\n            'if else elif endif define undef warning error line '\n            + 'pragma ifdef ifndef include' },\n        contains: [\n          {\n            begin: /\\\\\\n/,\n            relevance: 0\n          },\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\n          {\n            className: 'string',\n            begin: /<.*?>/,\n            end: /$/,\n            illegal: '\\\\n'\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        className: 'class',\n        begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\\\b',\n        end: /(\\{|$)/,\n        excludeEnd: true,\n        keywords: CLASS_KEYWORDS,\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n      },\n      {\n        begin: '\\\\.' + hljs.UNDERSCORE_IDENT_RE,\n        relevance: 0\n      }\n    ]\n  };\n}\n\nexport { objectivec as default };\n", "/*\nLanguage: Perl\nAuthor: Peter Leonov <gojpeg@yandex.ru>\nWebsite: https://www.perl.org\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction perl(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = [\n    'abs',\n    'accept',\n    'alarm',\n    'and',\n    'atan2',\n    'bind',\n    'binmode',\n    'bless',\n    'break',\n    'caller',\n    'chdir',\n    'chmod',\n    'chomp',\n    'chop',\n    'chown',\n    'chr',\n    'chroot',\n    'close',\n    'closedir',\n    'connect',\n    'continue',\n    'cos',\n    'crypt',\n    'dbmclose',\n    'dbmopen',\n    'defined',\n    'delete',\n    'die',\n    'do',\n    'dump',\n    'each',\n    'else',\n    'elsif',\n    'endgrent',\n    'endhostent',\n    'endnetent',\n    'endprotoent',\n    'endpwent',\n    'endservent',\n    'eof',\n    'eval',\n    'exec',\n    'exists',\n    'exit',\n    'exp',\n    'fcntl',\n    'fileno',\n    'flock',\n    'for',\n    'foreach',\n    'fork',\n    'format',\n    'formline',\n    'getc',\n    'getgrent',\n    'getgrgid',\n    'getgrnam',\n    'gethostbyaddr',\n    'gethostbyname',\n    'gethostent',\n    'getlogin',\n    'getnetbyaddr',\n    'getnetbyname',\n    'getnetent',\n    'getpeername',\n    'getpgrp',\n    'getpriority',\n    'getprotobyname',\n    'getprotobynumber',\n    'getprotoent',\n    'getpwent',\n    'getpwnam',\n    'getpwuid',\n    'getservbyname',\n    'getservbyport',\n    'getservent',\n    'getsockname',\n    'getsockopt',\n    'given',\n    'glob',\n    'gmtime',\n    'goto',\n    'grep',\n    'gt',\n    'hex',\n    'if',\n    'index',\n    'int',\n    'ioctl',\n    'join',\n    'keys',\n    'kill',\n    'last',\n    'lc',\n    'lcfirst',\n    'length',\n    'link',\n    'listen',\n    'local',\n    'localtime',\n    'log',\n    'lstat',\n    'lt',\n    'ma',\n    'map',\n    'mkdir',\n    'msgctl',\n    'msgget',\n    'msgrcv',\n    'msgsnd',\n    'my',\n    'ne',\n    'next',\n    'no',\n    'not',\n    'oct',\n    'open',\n    'opendir',\n    'or',\n    'ord',\n    'our',\n    'pack',\n    'package',\n    'pipe',\n    'pop',\n    'pos',\n    'print',\n    'printf',\n    'prototype',\n    'push',\n    'q|0',\n    'qq',\n    'quotemeta',\n    'qw',\n    'qx',\n    'rand',\n    'read',\n    'readdir',\n    'readline',\n    'readlink',\n    'readpipe',\n    'recv',\n    'redo',\n    'ref',\n    'rename',\n    'require',\n    'reset',\n    'return',\n    'reverse',\n    'rewinddir',\n    'rindex',\n    'rmdir',\n    'say',\n    'scalar',\n    'seek',\n    'seekdir',\n    'select',\n    'semctl',\n    'semget',\n    'semop',\n    'send',\n    'setgrent',\n    'sethostent',\n    'setnetent',\n    'setpgrp',\n    'setpriority',\n    'setprotoent',\n    'setpwent',\n    'setservent',\n    'setsockopt',\n    'shift',\n    'shmctl',\n    'shmget',\n    'shmread',\n    'shmwrite',\n    'shutdown',\n    'sin',\n    'sleep',\n    'socket',\n    'socketpair',\n    'sort',\n    'splice',\n    'split',\n    'sprintf',\n    'sqrt',\n    'srand',\n    'stat',\n    'state',\n    'study',\n    'sub',\n    'substr',\n    'symlink',\n    'syscall',\n    'sysopen',\n    'sysread',\n    'sysseek',\n    'system',\n    'syswrite',\n    'tell',\n    'telldir',\n    'tie',\n    'tied',\n    'time',\n    'times',\n    'tr',\n    'truncate',\n    'uc',\n    'ucfirst',\n    'umask',\n    'undef',\n    'unless',\n    'unlink',\n    'unpack',\n    'unshift',\n    'untie',\n    'until',\n    'use',\n    'utime',\n    'values',\n    'vec',\n    'wait',\n    'waitpid',\n    'wantarray',\n    'warn',\n    'when',\n    'while',\n    'write',\n    'x|0',\n    'xor',\n    'y|0'\n  ];\n\n  // https://perldoc.perl.org/perlre#Modifiers\n  const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/; // aa and xx are valid, making max length 12\n  const PERL_KEYWORDS = {\n    $pattern: /[\\w.]+/,\n    keyword: KEYWORDS.join(\" \")\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: '[$@]\\\\{',\n    end: '\\\\}',\n    keywords: PERL_KEYWORDS\n  };\n  const METHOD = {\n    begin: /->\\{/,\n    end: /\\}/\n    // contains defined later\n  };\n  const VAR = { variants: [\n    { begin: /\\$\\d/ },\n    { begin: regex.concat(\n      /[$%@](\\^\\w\\b|#\\w+(::\\w+)*|\\{\\w+\\}|\\w+(::\\w*)*)/,\n      // negative look-ahead tries to avoid matching patterns that are not\n      // Perl at all like $ident$, @ident@, etc.\n      `(?![A-Za-z])(?![@$%])`\n    ) },\n    {\n      begin: /[$%@][^\\s\\w{]/,\n      relevance: 0\n    }\n  ] };\n  const STRING_CONTAINS = [\n    hljs.BACKSLASH_ESCAPE,\n    SUBST,\n    VAR\n  ];\n  const REGEX_DELIMS = [\n    /!/,\n    /\\//,\n    /\\|/,\n    /\\?/,\n    /'/,\n    /\"/, // valid but infrequent and weird\n    /#/ // valid but infrequent and weird\n  ];\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_DOUBLE_RE = (prefix, open, close = '\\\\1') => {\n    const middle = (close === '\\\\1')\n      ? close\n      : regex.concat(close, open);\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      middle,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_RE = (prefix, open, close) => {\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  const PERL_DEFAULT_CONTAINS = [\n    VAR,\n    hljs.HASH_COMMENT_MODE,\n    hljs.COMMENT(\n      /^=\\w/,\n      /=cut/,\n      { endsWithParent: true }\n    ),\n    METHOD,\n    {\n      className: 'string',\n      contains: STRING_CONTAINS,\n      variants: [\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\(',\n          end: '\\\\)',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\[',\n          end: '\\\\]',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\{',\n          end: '\\\\}',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\|',\n          end: '\\\\|',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*<',\n          end: '>',\n          relevance: 5\n        },\n        {\n          begin: 'qw\\\\s+q',\n          end: 'q',\n          relevance: 5\n        },\n        {\n          begin: '\\'',\n          end: '\\'',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: '\"',\n          end: '\"'\n        },\n        {\n          begin: '`',\n          end: '`',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /\\{\\w+\\}/,\n          relevance: 0\n        },\n        {\n          begin: '-?\\\\w+\\\\s*=>',\n          relevance: 0\n        }\n      ]\n    },\n    {\n      className: 'number',\n      begin: '(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b',\n      relevance: 0\n    },\n    { // regexp container\n      begin: '(\\\\/\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*',\n      keywords: 'split return print reverse grep',\n      relevance: 0,\n      contains: [\n        hljs.HASH_COMMENT_MODE,\n        {\n          className: 'regexp',\n          variants: [\n            // allow matching common delimiters\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", regex.either(...REGEX_DELIMS, { capture: true })) },\n            // and then paired delmis\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\(\", \"\\\\)\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\[\", \"\\\\]\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\{\", \"\\\\}\") }\n          ],\n          relevance: 2\n        },\n        {\n          className: 'regexp',\n          variants: [\n            {\n              // could be a comment in many languages so do not count\n              // as relevant\n              begin: /(m|qr)\\/\\//,\n              relevance: 0\n            },\n            // prefix is optional with /regex/\n            { begin: PAIRED_RE(\"(?:m|qr)?\", /\\//, /\\//) },\n            // allow matching common delimiters\n            { begin: PAIRED_RE(\"m|qr\", regex.either(...REGEX_DELIMS, { capture: true }), /\\1/) },\n            // allow common paired delmins\n            { begin: PAIRED_RE(\"m|qr\", /\\(/, /\\)/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\[/, /\\]/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\{/, /\\}/) }\n          ]\n        }\n      ]\n    },\n    {\n      className: 'function',\n      beginKeywords: 'sub',\n      end: '(\\\\s*\\\\(.*?\\\\))?[;{]',\n      excludeEnd: true,\n      relevance: 5,\n      contains: [ hljs.TITLE_MODE ]\n    },\n    {\n      begin: '-\\\\w\\\\b',\n      relevance: 0\n    },\n    {\n      begin: \"^__DATA__$\",\n      end: \"^__END__$\",\n      subLanguage: 'mojolicious',\n      contains: [\n        {\n          begin: \"^@@.*\",\n          end: \"$\",\n          className: \"comment\"\n        }\n      ]\n    }\n  ];\n  SUBST.contains = PERL_DEFAULT_CONTAINS;\n  METHOD.contains = PERL_DEFAULT_CONTAINS;\n\n  return {\n    name: 'Perl',\n    aliases: [\n      'pl',\n      'pm'\n    ],\n    keywords: PERL_KEYWORDS,\n    contains: PERL_DEFAULT_CONTAINS\n  };\n}\n\nexport { perl as default };\n", "/*\nLanguage: PHP\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://www.php.net\nCategory: common\n*/\n\n/**\n * @param {HLJSApi} hljs\n * @returns {LanguageDetail}\n * */\nfunction php(hljs) {\n  const regex = hljs.regex;\n  // negative look-ahead tries to avoid matching patterns that are not\n  // Perl at all like $ident$, @ident@, etc.\n  const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\n  const IDENT_RE = regex.concat(\n    /[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,\n    NOT_PERL_ETC);\n  // Will not detect camelCase classes\n  const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\n    /(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,\n    NOT_PERL_ETC);\n  const VARIABLE = {\n    scope: 'variable',\n    match: '\\\\$+' + IDENT_RE,\n  };\n  const PREPROCESSOR = {\n    scope: 'meta',\n    variants: [\n      { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n      { begin: /<\\?=/ },\n      // less relevant per PSR-1 which says not to use short-tags\n      { begin: /<\\?/, relevance: 0.1 },\n      { begin: /\\?>/ } // end php tag\n    ]\n  };\n  const SUBST = {\n    scope: 'subst',\n    variants: [\n      { begin: /\\$\\w+/ },\n      {\n        begin: /\\{\\$/,\n        end: /\\}/\n      }\n    ]\n  };\n  const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\n  const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n    illegal: null,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n  });\n\n  const HEREDOC = {\n    begin: /<<<[ \\t]*(?:(\\w+)|\"(\\w+)\")\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n    'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\n    'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\n  };\n\n  const NOWDOC = hljs.END_SAME_AS_BEGIN({\n    begin: /<<<[ \\t]*'(\\w+)'\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n  });\n  // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\n  const WHITESPACE = '[ \\t\\n]';\n  const STRING = {\n    scope: 'string',\n    variants: [\n      DOUBLE_QUOTED,\n      SINGLE_QUOTED,\n      HEREDOC,\n      NOWDOC\n    ]\n  };\n  const NUMBER = {\n    scope: 'number',\n    variants: [\n      { begin: `\\\\b0[bB][01]+(?:_[01]+)*\\\\b` }, // Binary w/ underscore support\n      { begin: `\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b` }, // Octals w/ underscore support\n      { begin: `\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b` }, // Hex w/ underscore support\n      // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\n      { begin: `(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?` }\n    ],\n    relevance: 0\n  };\n  const LITERALS = [\n    \"false\",\n    \"null\",\n    \"true\"\n  ];\n  const KWS = [\n    // Magic constants:\n    // <https://www.php.net/manual/en/language.constants.predefined.php>\n    \"__CLASS__\",\n    \"__DIR__\",\n    \"__FILE__\",\n    \"__FUNCTION__\",\n    \"__COMPILER_HALT_OFFSET__\",\n    \"__LINE__\",\n    \"__METHOD__\",\n    \"__NAMESPACE__\",\n    \"__TRAIT__\",\n    // Function that look like language construct or language construct that look like function:\n    // List of keywords that may not require parenthesis\n    \"die\",\n    \"echo\",\n    \"exit\",\n    \"include\",\n    \"include_once\",\n    \"print\",\n    \"require\",\n    \"require_once\",\n    // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n    // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\n    // Other keywords:\n    // <https://www.php.net/manual/en/reserved.php>\n    // <https://www.php.net/manual/en/language.types.type-juggling.php>\n    \"array\",\n    \"abstract\",\n    \"and\",\n    \"as\",\n    \"binary\",\n    \"bool\",\n    \"boolean\",\n    \"break\",\n    \"callable\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"clone\",\n    \"const\",\n    \"continue\",\n    \"declare\",\n    \"default\",\n    \"do\",\n    \"double\",\n    \"else\",\n    \"elseif\",\n    \"empty\",\n    \"enddeclare\",\n    \"endfor\",\n    \"endforeach\",\n    \"endif\",\n    \"endswitch\",\n    \"endwhile\",\n    \"enum\",\n    \"eval\",\n    \"extends\",\n    \"final\",\n    \"finally\",\n    \"float\",\n    \"for\",\n    \"foreach\",\n    \"from\",\n    \"global\",\n    \"goto\",\n    \"if\",\n    \"implements\",\n    \"instanceof\",\n    \"insteadof\",\n    \"int\",\n    \"integer\",\n    \"interface\",\n    \"isset\",\n    \"iterable\",\n    \"list\",\n    \"match|0\",\n    \"mixed\",\n    \"new\",\n    \"never\",\n    \"object\",\n    \"or\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"readonly\",\n    \"real\",\n    \"return\",\n    \"string\",\n    \"switch\",\n    \"throw\",\n    \"trait\",\n    \"try\",\n    \"unset\",\n    \"use\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"xor\",\n    \"yield\"\n  ];\n\n  const BUILT_INS = [\n    // Standard PHP library:\n    // <https://www.php.net/manual/en/book.spl.php>\n    \"Error|0\",\n    \"AppendIterator\",\n    \"ArgumentCountError\",\n    \"ArithmeticError\",\n    \"ArrayIterator\",\n    \"ArrayObject\",\n    \"AssertionError\",\n    \"BadFunctionCallException\",\n    \"BadMethodCallException\",\n    \"CachingIterator\",\n    \"CallbackFilterIterator\",\n    \"CompileError\",\n    \"Countable\",\n    \"DirectoryIterator\",\n    \"DivisionByZeroError\",\n    \"DomainException\",\n    \"EmptyIterator\",\n    \"ErrorException\",\n    \"Exception\",\n    \"FilesystemIterator\",\n    \"FilterIterator\",\n    \"GlobIterator\",\n    \"InfiniteIterator\",\n    \"InvalidArgumentException\",\n    \"IteratorIterator\",\n    \"LengthException\",\n    \"LimitIterator\",\n    \"LogicException\",\n    \"MultipleIterator\",\n    \"NoRewindIterator\",\n    \"OutOfBoundsException\",\n    \"OutOfRangeException\",\n    \"OuterIterator\",\n    \"OverflowException\",\n    \"ParentIterator\",\n    \"ParseError\",\n    \"RangeException\",\n    \"RecursiveArrayIterator\",\n    \"RecursiveCachingIterator\",\n    \"RecursiveCallbackFilterIterator\",\n    \"RecursiveDirectoryIterator\",\n    \"RecursiveFilterIterator\",\n    \"RecursiveIterator\",\n    \"RecursiveIteratorIterator\",\n    \"RecursiveRegexIterator\",\n    \"RecursiveTreeIterator\",\n    \"RegexIterator\",\n    \"RuntimeException\",\n    \"SeekableIterator\",\n    \"SplDoublyLinkedList\",\n    \"SplFileInfo\",\n    \"SplFileObject\",\n    \"SplFixedArray\",\n    \"SplHeap\",\n    \"SplMaxHeap\",\n    \"SplMinHeap\",\n    \"SplObjectStorage\",\n    \"SplObserver\",\n    \"SplPriorityQueue\",\n    \"SplQueue\",\n    \"SplStack\",\n    \"SplSubject\",\n    \"SplTempFileObject\",\n    \"TypeError\",\n    \"UnderflowException\",\n    \"UnexpectedValueException\",\n    \"UnhandledMatchError\",\n    // Reserved interfaces:\n    // <https://www.php.net/manual/en/reserved.interfaces.php>\n    \"ArrayAccess\",\n    \"BackedEnum\",\n    \"Closure\",\n    \"Fiber\",\n    \"Generator\",\n    \"Iterator\",\n    \"IteratorAggregate\",\n    \"Serializable\",\n    \"Stringable\",\n    \"Throwable\",\n    \"Traversable\",\n    \"UnitEnum\",\n    \"WeakReference\",\n    \"WeakMap\",\n    // Reserved classes:\n    // <https://www.php.net/manual/en/reserved.classes.php>\n    \"Directory\",\n    \"__PHP_Incomplete_Class\",\n    \"parent\",\n    \"php_user_filter\",\n    \"self\",\n    \"static\",\n    \"stdClass\"\n  ];\n\n  /** Dual-case keywords\n   *\n   * [\"then\",\"FILE\"] =>\n   *     [\"then\", \"THEN\", \"FILE\", \"file\"]\n   *\n   * @param {string[]} items */\n  const dualCase = (items) => {\n    /** @type string[] */\n    const result = [];\n    items.forEach(item => {\n      result.push(item);\n      if (item.toLowerCase() === item) {\n        result.push(item.toUpperCase());\n      } else {\n        result.push(item.toLowerCase());\n      }\n    });\n    return result;\n  };\n\n  const KEYWORDS = {\n    keyword: KWS,\n    literal: dualCase(LITERALS),\n    built_in: BUILT_INS,\n  };\n\n  /**\n   * @param {string[]} items */\n  const normalizeKeywords = (items) => {\n    return items.map(item => {\n      return item.replace(/\\|\\d+$/, \"\");\n    });\n  };\n\n  const CONSTRUCTOR_CALL = { variants: [\n    {\n      match: [\n        /new/,\n        regex.concat(WHITESPACE, \"+\"),\n        // to prevent built ins from being confused as the class constructor call\n        regex.concat(\"(?!\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n        PASCAL_CASE_CLASS_NAME_RE,\n      ],\n      scope: {\n        1: \"keyword\",\n        4: \"title.class\",\n      },\n    }\n  ] };\n\n  const CONSTANT_REFERENCE = regex.concat(IDENT_RE, \"\\\\b(?!\\\\()\");\n\n  const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\n    {\n      match: [\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: { 2: \"variable.constant\", },\n    },\n    {\n      match: [\n        /::/,\n        /class/,\n      ],\n      scope: { 2: \"variable.language\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.constant\",\n      },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          \"::\",\n          regex.lookahead(/(?!class\\b)/)\n        ),\n      ],\n      scope: { 1: \"title.class\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        /::/,\n        /class/,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.language\",\n      },\n    }\n  ] };\n\n  const NAMED_ARGUMENT = {\n    scope: 'attr',\n    match: regex.concat(IDENT_RE, regex.lookahead(':'), regex.lookahead(/(?!::)/)),\n  };\n  const PARAMS_MODE = {\n    relevance: 0,\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      NAMED_ARGUMENT,\n      VARIABLE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      hljs.C_BLOCK_COMMENT_MODE,\n      STRING,\n      NUMBER,\n      CONSTRUCTOR_CALL,\n    ],\n  };\n  const FUNCTION_INVOKE = {\n    relevance: 0,\n    match: [\n      /\\b/,\n      // to prevent keywords from being confused as the function title\n      regex.concat(\"(?!fn\\\\b|function\\\\b|\", normalizeKeywords(KWS).join(\"\\\\b|\"), \"|\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n      IDENT_RE,\n      regex.concat(WHITESPACE, \"*\"),\n      regex.lookahead(/(?=\\()/)\n    ],\n    scope: { 3: \"title.function.invoke\", },\n    contains: [ PARAMS_MODE ]\n  };\n  PARAMS_MODE.contains.push(FUNCTION_INVOKE);\n\n  const ATTRIBUTE_CONTAINS = [\n    NAMED_ARGUMENT,\n    LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING,\n    NUMBER,\n    CONSTRUCTOR_CALL,\n  ];\n\n  const ATTRIBUTES = {\n    begin: regex.concat(/#\\[\\s*/, PASCAL_CASE_CLASS_NAME_RE),\n    beginScope: \"meta\",\n    end: /]/,\n    endScope: \"meta\",\n    keywords: {\n      literal: LITERALS,\n      keyword: [\n        'new',\n        'array',\n      ]\n    },\n    contains: [\n      {\n        begin: /\\[/,\n        end: /]/,\n        keywords: {\n          literal: LITERALS,\n          keyword: [\n            'new',\n            'array',\n          ]\n        },\n        contains: [\n          'self',\n          ...ATTRIBUTE_CONTAINS,\n        ]\n      },\n      ...ATTRIBUTE_CONTAINS,\n      {\n        scope: 'meta',\n        match: PASCAL_CASE_CLASS_NAME_RE\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: false,\n    keywords: KEYWORDS,\n    contains: [\n      ATTRIBUTES,\n      hljs.HASH_COMMENT_MODE,\n      hljs.COMMENT('//', '$'),\n      hljs.COMMENT(\n        '/\\\\*',\n        '\\\\*/',\n        { contains: [\n          {\n            scope: 'doctag',\n            match: '@[A-Za-z]+'\n          }\n        ] }\n      ),\n      {\n        match: /__halt_compiler\\(\\);/,\n        keywords: '__halt_compiler',\n        starts: {\n          scope: \"comment\",\n          end: hljs.MATCH_NOTHING_RE,\n          contains: [\n            {\n              match: /\\?>/,\n              scope: \"meta\",\n              endsParent: true\n            }\n          ]\n        }\n      },\n      PREPROCESSOR,\n      {\n        scope: 'variable.language',\n        match: /\\$this\\b/\n      },\n      VARIABLE,\n      FUNCTION_INVOKE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      {\n        match: [\n          /const/,\n          /\\s/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"variable.constant\",\n        },\n      },\n      CONSTRUCTOR_CALL,\n      {\n        scope: 'function',\n        relevance: 0,\n        beginKeywords: 'fn function',\n        end: /[;{]/,\n        excludeEnd: true,\n        illegal: '[$%\\\\[]',\n        contains: [\n          { beginKeywords: 'use', },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            begin: '=>', // No markup, just a relevance booster\n            endsParent: true\n          },\n          {\n            scope: 'params',\n            begin: '\\\\(',\n            end: '\\\\)',\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              'self',\n              VARIABLE,\n              LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRING,\n              NUMBER\n            ]\n          },\n        ]\n      },\n      {\n        scope: 'class',\n        variants: [\n          {\n            beginKeywords: \"enum\",\n            illegal: /[($\"]/\n          },\n          {\n            beginKeywords: \"class interface trait\",\n            illegal: /[:($\"]/\n          }\n        ],\n        relevance: 0,\n        end: /\\{/,\n        excludeEnd: true,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      // both use and namespace still use \"old style\" rules (vs multi-match)\n      // because the namespace name can include `\\` and we still want each\n      // element to be treated as its own *individual* title\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: ';',\n        illegal: /[.']/,\n        contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: \"title.class\" }) ]\n      },\n      {\n        beginKeywords: 'use',\n        relevance: 0,\n        end: ';',\n        contains: [\n          // TODO: title.function vs title.class\n          {\n            match: /\\b(as|const|function)\\b/,\n            scope: \"keyword\"\n          },\n          // TODO: could be title.class or title.function\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      STRING,\n      NUMBER,\n    ]\n  };\n}\n\nexport { php as default };\n", "/*\nLanguage: PHP Template\nRequires: xml.js, php.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nWebsite: https://www.php.net\nCategory: common\n*/\n\nfunction phpTemplate(hljs) {\n  return {\n    name: \"PHP template\",\n    subLanguage: 'xml',\n    contains: [\n      {\n        begin: /<\\?(php|=)?/,\n        end: /\\?>/,\n        subLanguage: 'php',\n        contains: [\n          // We don't want the php closing tag ?> to close the PHP block when\n          // inside any of the following blocks:\n          {\n            begin: '/\\\\*',\n            end: '\\\\*/',\n            skip: true\n          },\n          {\n            begin: 'b\"',\n            end: '\"',\n            skip: true\n          },\n          {\n            begin: 'b\\'',\n            end: '\\'',\n            skip: true\n          },\n          hljs.inherit(hljs.APOS_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          }),\n          hljs.inherit(hljs.QUOTE_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          })\n        ]\n      }\n    ]\n  };\n}\n\nexport { phpTemplate as default };\n", "/*\nLanguage: Plain text\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\nDescription: Plain text without any highlighting.\nCategory: common\n*/\n\nfunction plaintext(hljs) {\n  return {\n    name: 'Plain text',\n    aliases: [\n      'text',\n      'txt'\n    ],\n    disableAutodetect: true\n  };\n}\n\nexport { plaintext as default };\n", "/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n  const RESERVED_WORDS = [\n    'and',\n    'as',\n    'assert',\n    'async',\n    'await',\n    'break',\n    'case',\n    'class',\n    'continue',\n    'def',\n    'del',\n    'elif',\n    'else',\n    'except',\n    'finally',\n    'for',\n    'from',\n    'global',\n    'if',\n    'import',\n    'in',\n    'is',\n    'lambda',\n    'match',\n    'nonlocal|10',\n    'not',\n    'or',\n    'pass',\n    'raise',\n    'return',\n    'try',\n    'while',\n    'with',\n    'yield'\n  ];\n\n  const BUILT_INS = [\n    '__import__',\n    'abs',\n    'all',\n    'any',\n    'ascii',\n    'bin',\n    'bool',\n    'breakpoint',\n    'bytearray',\n    'bytes',\n    'callable',\n    'chr',\n    'classmethod',\n    'compile',\n    'complex',\n    'delattr',\n    'dict',\n    'dir',\n    'divmod',\n    'enumerate',\n    'eval',\n    'exec',\n    'filter',\n    'float',\n    'format',\n    'frozenset',\n    'getattr',\n    'globals',\n    'hasattr',\n    'hash',\n    'help',\n    'hex',\n    'id',\n    'input',\n    'int',\n    'isinstance',\n    'issubclass',\n    'iter',\n    'len',\n    'list',\n    'locals',\n    'map',\n    'max',\n    'memoryview',\n    'min',\n    'next',\n    'object',\n    'oct',\n    'open',\n    'ord',\n    'pow',\n    'print',\n    'property',\n    'range',\n    'repr',\n    'reversed',\n    'round',\n    'set',\n    'setattr',\n    'slice',\n    'sorted',\n    'staticmethod',\n    'str',\n    'sum',\n    'super',\n    'tuple',\n    'type',\n    'vars',\n    'zip'\n  ];\n\n  const LITERALS = [\n    '__debug__',\n    'Ellipsis',\n    'False',\n    'None',\n    'NotImplemented',\n    'True'\n  ];\n\n  // https://docs.python.org/3/library/typing.html\n  // TODO: Could these be supplemented by a CamelCase matcher in certain\n  // contexts, leaving these remaining only for relevance hinting?\n  const TYPES = [\n    \"Any\",\n    \"Callable\",\n    \"Coroutine\",\n    \"Dict\",\n    \"List\",\n    \"Literal\",\n    \"Generic\",\n    \"Optional\",\n    \"Sequence\",\n    \"Set\",\n    \"Tuple\",\n    \"Type\",\n    \"Union\"\n  ];\n\n  const KEYWORDS = {\n    $pattern: /[A-Za-z]\\w+|__\\w+__/,\n    keyword: RESERVED_WORDS,\n    built_in: BUILT_INS,\n    literal: LITERALS,\n    type: TYPES\n  };\n\n  const PROMPT = {\n    className: 'meta',\n    begin: /^(>>>|\\.\\.\\.) /\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS,\n    illegal: /#/\n  };\n\n  const LITERAL_BRACKET = {\n    begin: /\\{\\{/,\n    relevance: 0\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([uU]|[rR])'/,\n        end: /'/,\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[rR])\"/,\n        end: /\"/,\n        relevance: 10\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])'/,\n        end: /'/\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n        end: /\"/\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'/,\n        end: /'/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n        end: /\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n  const digitpart = '[0-9](_?[0-9])*';\n  const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n  // Whitespace after a number (or any lexical token) is needed only if its absence\n  // would change the tokenization\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n  // We deviate slightly, requiring a word boundary or a keyword\n  // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n  const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // exponentfloat, pointfloat\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n      // optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      // Note: no leading \\b because floats can start with a decimal point\n      // and we don't want to mishandle e.g. `fn(.5)`,\n      // no trailing \\b for pointfloat because it can end with a decimal point\n      // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n      // because both MUST contain a decimal point and so cannot be confused with\n      // the interior part of an identifier\n      {\n        begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n      },\n      {\n        begin: `(${pointfloat})[jJ]?`\n      },\n\n      // decinteger, bininteger, octinteger, hexinteger\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n      // optionally \"long\" in Python 2\n      // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n      // decinteger is optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n      },\n\n      // imagnumber (digitpart-based)\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n      }\n    ]\n  };\n  const COMMENT_TYPE = {\n    className: \"comment\",\n    begin: regex.lookahead(/# type:/),\n    end: /$/,\n    keywords: KEYWORDS,\n    contains: [\n      { // prevent keywords from coloring `type`\n        begin: /# type:/\n      },\n      // comment within a datatype comment includes no keywords\n      {\n        begin: /#/,\n        end: /\\b\\B/,\n        endsWithParent: true\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    variants: [\n      // Exclude params in functions without params\n      {\n        className: \"\",\n        begin: /\\(\\s*\\)/,\n        skip: true\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          PROMPT,\n          NUMBER,\n          STRING,\n          hljs.HASH_COMMENT_MODE\n        ]\n      }\n    ]\n  };\n  SUBST.contains = [\n    STRING,\n    NUMBER,\n    PROMPT\n  ];\n\n  return {\n    name: 'Python',\n    aliases: [\n      'py',\n      'gyp',\n      'ipython'\n    ],\n    unicodeRegex: true,\n    keywords: KEYWORDS,\n    illegal: /(<\\/|\\?)|=>/,\n    contains: [\n      PROMPT,\n      NUMBER,\n      {\n        // very common convention\n        begin: /\\bself\\b/\n      },\n      {\n        // eat \"if\" prior to string so that it won't accidentally be\n        // labeled as an f-string\n        beginKeywords: \"if\",\n        relevance: 0\n      },\n      STRING,\n      COMMENT_TYPE,\n      hljs.HASH_COMMENT_MODE,\n      {\n        match: [\n          /\\bdef/, /\\s+/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.function\"\n        },\n        contains: [ PARAMS ]\n      },\n      {\n        variants: [\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE, /\\s*/,\n              /\\(\\s*/, IDENT_RE,/\\s*\\)/\n            ],\n          },\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE\n            ],\n          }\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          6: \"title.class.inherited\",\n        }\n      },\n      {\n        className: 'meta',\n        begin: /^[\\t ]*@/,\n        end: /(?=#)|$/,\n        contains: [\n          NUMBER,\n          PARAMS,\n          STRING\n        ]\n      }\n    ]\n  };\n}\n\nexport { python as default };\n", "/*\nLanguage: Python REPL\nRequires: python.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nCategory: common\n*/\n\nfunction pythonRepl(hljs) {\n  return {\n    aliases: [ 'pycon' ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        starts: {\n          // a space separates the REPL prefix from the actual code\n          // this is purely for cleaner HTML output\n          end: / |$/,\n          starts: {\n            end: '$',\n            subLanguage: 'python'\n          }\n        },\n        variants: [\n          { begin: /^>>>(?=[ ]|$)/ },\n          { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n        ]\n      }\n    ]\n  };\n}\n\nexport { pythonRepl as default };\n", "/*\nLanguage: R\nDescription: R is a free software environment for statistical computing and graphics.\nAuthor: Joe Cheng <joe@rstudio.org>\nContributors: Konrad Rudolph <konrad.rudolph@gmail.com>\nWebsite: https://www.r-project.org\nCategory: common,scientific\n*/\n\n/** @type LanguageFn */\nfunction r(hljs) {\n  const regex = hljs.regex;\n  // Identifiers in R cannot start with `_`, but they can start with `.` if it\n  // is not immediately followed by a digit.\n  // R also supports quoted identifiers, which are near-arbitrary sequences\n  // delimited by backticks (`\u2026`), which may contain escape sequences. These are\n  // handled in a separate mode. See `test/markup/r/names.txt` for examples.\n  // FIXME: Support Unicode identifiers.\n  const IDENT_RE = /(?:(?:[a-zA-Z]|\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\.(?!\\d)/;\n  const NUMBER_TYPES_RE = regex.either(\n    // Special case: only hexadecimal binary powers can contain fractions\n    /0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/,\n    // Hexadecimal numbers without fraction and optional binary power\n    /0[xX][0-9a-fA-F]+(?:[pP][+-]?\\d+)?[Li]?/,\n    // Decimal numbers\n    /(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?[Li]?/\n  );\n  const OPERATORS_RE = /[=!<>:]=|\\|\\||&&|:::?|<-|<<-|->>|->|\\|>|[-+*\\/?!$&|:<=>@^~]|\\*\\*/;\n  const PUNCTUATION_RE = regex.either(\n    /[()]/,\n    /[{}]/,\n    /\\[\\[/,\n    /[[\\]]/,\n    /\\\\/,\n    /,/\n  );\n\n  return {\n    name: 'R',\n\n    keywords: {\n      $pattern: IDENT_RE,\n      keyword:\n        'function if in break next repeat else for while',\n      literal:\n        'NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 '\n        + 'NA_character_|10 NA_complex_|10',\n      built_in:\n        // Builtin constants\n        'LETTERS letters month.abb month.name pi T F '\n        // Primitive functions\n        // These are all the functions in `base` that are implemented as a\n        // `.Primitive`, minus those functions that are also keywords.\n        + 'abs acos acosh all any anyNA Arg as.call as.character '\n        + 'as.complex as.double as.environment as.integer as.logical '\n        + 'as.null.default as.numeric as.raw asin asinh atan atanh attr '\n        + 'attributes baseenv browser c call ceiling class Conj cos cosh '\n        + 'cospi cummax cummin cumprod cumsum digamma dim dimnames '\n        + 'emptyenv exp expression floor forceAndCall gamma gc.time '\n        + 'globalenv Im interactive invisible is.array is.atomic is.call '\n        + 'is.character is.complex is.double is.environment is.expression '\n        + 'is.finite is.function is.infinite is.integer is.language '\n        + 'is.list is.logical is.matrix is.na is.name is.nan is.null '\n        + 'is.numeric is.object is.pairlist is.raw is.recursive is.single '\n        + 'is.symbol lazyLoadDBfetch length lgamma list log max min '\n        + 'missing Mod names nargs nzchar oldClass on.exit pos.to.env '\n        + 'proc.time prod quote range Re rep retracemem return round '\n        + 'seq_along seq_len seq.int sign signif sin sinh sinpi sqrt '\n        + 'standardGeneric substitute sum switch tan tanh tanpi tracemem '\n        + 'trigamma trunc unclass untracemem UseMethod xtfrm',\n    },\n\n    contains: [\n      // Roxygen comments\n      hljs.COMMENT(\n        /#'/,\n        /$/,\n        { contains: [\n          {\n            // Handle `@examples` separately to cause all subsequent code\n            // until the next `@`-tag on its own line to be kept as-is,\n            // preventing highlighting. This code is example R code, so nested\n            // doctags shouldn\u2019t be treated as such. See\n            // `test/markup/r/roxygen.txt` for an example.\n            scope: 'doctag',\n            match: /@examples/,\n            starts: {\n              end: regex.lookahead(regex.either(\n                // end if another doc comment\n                /\\n^#'\\s*(?=@[a-zA-Z]+)/,\n                // or a line with no comment\n                /\\n^(?!#')/\n              )),\n              endsParent: true\n            }\n          },\n          {\n            // Handle `@param` to highlight the parameter name following\n            // after.\n            scope: 'doctag',\n            begin: '@param',\n            end: /$/,\n            contains: [\n              {\n                scope: 'variable',\n                variants: [\n                  { match: IDENT_RE },\n                  { match: /`(?:\\\\.|[^`\\\\])+`/ }\n                ],\n                endsParent: true\n              }\n            ]\n          },\n          {\n            scope: 'doctag',\n            match: /@[a-zA-Z]+/\n          },\n          {\n            scope: 'keyword',\n            match: /\\\\[a-zA-Z]+/\n          }\n        ] }\n      ),\n\n      hljs.HASH_COMMENT_MODE,\n\n      {\n        scope: 'string',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        variants: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\(/,\n            end: /\\)(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\{/,\n            end: /\\}(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\[/,\n            end: /\\](-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\(/,\n            end: /\\)(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\{/,\n            end: /\\}(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\[/,\n            end: /\\](-*)'/\n          }),\n          {\n            begin: '\"',\n            end: '\"',\n            relevance: 0\n          },\n          {\n            begin: \"'\",\n            end: \"'\",\n            relevance: 0\n          }\n        ],\n      },\n\n      // Matching numbers immediately following punctuation and operators is\n      // tricky since we need to look at the character ahead of a number to\n      // ensure the number is not part of an identifier, and we cannot use\n      // negative look-behind assertions. So instead we explicitly handle all\n      // possible combinations of (operator|punctuation), number.\n      // TODO: replace with negative look-behind when available\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/ },\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+([pP][+-]?\\d+)?[Li]?/ },\n      // { begin: /(?<![a-zA-Z0-9._])(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?[Li]?/ }\n      {\n        relevance: 0,\n        variants: [\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              OPERATORS_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              /%[^%]*%/,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'punctuation',\n              2: 'number'\n            },\n            match: [\n              PUNCTUATION_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: { 2: 'number' },\n            match: [\n              /[^a-zA-Z0-9._]|^/, // not part of an identifier, or start of document\n              NUMBER_TYPES_RE\n            ]\n          }\n        ]\n      },\n\n      // Operators/punctuation when they're not directly followed by numbers\n      {\n        // Relevance boost for the most common assignment form.\n        scope: { 3: 'operator' },\n        match: [\n          IDENT_RE,\n          /\\s+/,\n          /<-/,\n          /\\s+/\n        ]\n      },\n\n      {\n        scope: 'operator',\n        relevance: 0,\n        variants: [\n          { match: OPERATORS_RE },\n          { match: /%[^%]*%/ }\n        ]\n      },\n\n      {\n        scope: 'punctuation',\n        relevance: 0,\n        match: PUNCTUATION_RE\n      },\n\n      {\n        // Escaped identifier\n        begin: '`',\n        end: '`',\n        contains: [ { begin: /\\\\./ } ]\n      }\n    ]\n  };\n}\n\nexport { r as default };\n", "/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov <anton@kovalyov.net>\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\nCategory: common\n*/\n\nfunction ruby(hljs) {\n  const regex = hljs.regex;\n  const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n  // TODO: move concepts like CAMEL_CASE into `modes.js`\n  const CLASS_NAME_RE = regex.either(\n    /\\b([A-Z]+[a-z0-9]+)+/,\n    // ends in caps\n    /\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\n  )\n  ;\n  const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\w+)*/);\n  // very popular ruby built-ins that one might even assume\n  // are actual keywords (despite that not being the case)\n  const PSEUDO_KWS = [\n    \"include\",\n    \"extend\",\n    \"prepend\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"raise\",\n    \"throw\"\n  ];\n  const RUBY_KEYWORDS = {\n    \"variable.constant\": [\n      \"__FILE__\",\n      \"__LINE__\",\n      \"__ENCODING__\"\n    ],\n    \"variable.language\": [\n      \"self\",\n      \"super\",\n    ],\n    keyword: [\n      \"alias\",\n      \"and\",\n      \"begin\",\n      \"BEGIN\",\n      \"break\",\n      \"case\",\n      \"class\",\n      \"defined\",\n      \"do\",\n      \"else\",\n      \"elsif\",\n      \"end\",\n      \"END\",\n      \"ensure\",\n      \"for\",\n      \"if\",\n      \"in\",\n      \"module\",\n      \"next\",\n      \"not\",\n      \"or\",\n      \"redo\",\n      \"require\",\n      \"rescue\",\n      \"retry\",\n      \"return\",\n      \"then\",\n      \"undef\",\n      \"unless\",\n      \"until\",\n      \"when\",\n      \"while\",\n      \"yield\",\n      ...PSEUDO_KWS\n    ],\n    built_in: [\n      \"proc\",\n      \"lambda\",\n      \"attr_accessor\",\n      \"attr_reader\",\n      \"attr_writer\",\n      \"define_method\",\n      \"private_constant\",\n      \"module_function\"\n    ],\n    literal: [\n      \"true\",\n      \"false\",\n      \"nil\"\n    ]\n  };\n  const YARDOCTAG = {\n    className: 'doctag',\n    begin: '@[A-Za-z]+'\n  };\n  const IRB_OBJECT = {\n    begin: '#<',\n    end: '>'\n  };\n  const COMMENT_MODES = [\n    hljs.COMMENT(\n      '#',\n      '$',\n      { contains: [ YARDOCTAG ] }\n    ),\n    hljs.COMMENT(\n      '^=begin',\n      '^=end',\n      {\n        contains: [ YARDOCTAG ],\n        relevance: 10\n      }\n    ),\n    hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\n  ];\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: RUBY_KEYWORDS\n  };\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /`/,\n        end: /`/\n      },\n      {\n        begin: /%[qQwWx]?\\(/,\n        end: /\\)/\n      },\n      {\n        begin: /%[qQwWx]?\\[/,\n        end: /\\]/\n      },\n      {\n        begin: /%[qQwWx]?\\{/,\n        end: /\\}/\n      },\n      {\n        begin: /%[qQwWx]?</,\n        end: />/\n      },\n      {\n        begin: /%[qQwWx]?\\//,\n        end: /\\//\n      },\n      {\n        begin: /%[qQwWx]?%/,\n        end: /%/\n      },\n      {\n        begin: /%[qQwWx]?-/,\n        end: /-/\n      },\n      {\n        begin: /%[qQwWx]?\\|/,\n        end: /\\|/\n      },\n      // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n      // where ? is the last character of a preceding identifier, as in: `func?4`\n      { begin: /\\B\\?(\\\\\\d{1,3})/ },\n      { begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/ },\n      { begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/ },\n      { begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\?\\S/ },\n      // heredocs\n      {\n        // this guard makes sure that we have an entire heredoc and not a false\n        // positive (auto-detect, etc.)\n        begin: regex.concat(\n          /<<[-~]?'?/,\n          regex.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)\n        ),\n        contains: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /(\\w+)/,\n            end: /(\\w+)/,\n            contains: [\n              hljs.BACKSLASH_ESCAPE,\n              SUBST\n            ]\n          })\n        ]\n      }\n    ]\n  };\n\n  // Ruby syntax is underdocumented, but this grammar seems to be accurate\n  // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n  // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n  const decimal = '[1-9](_?[0-9])*|0';\n  const digits = '[0-9](_?[0-9])*';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal integer/float, optionally exponential or rational, optionally imaginary\n      { begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b` },\n\n      // explicit decimal/binary/octal/hexadecimal integer,\n      // optionally rational and/or imaginary\n      { begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\" },\n\n      // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n      { begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\" }\n    ]\n  };\n\n  const PARAMS = {\n    variants: [\n      {\n        match: /\\(\\)/,\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /(?=\\))/,\n        excludeBegin: true,\n        endsParent: true,\n        keywords: RUBY_KEYWORDS,\n      }\n    ]\n  };\n\n  const INCLUDE_EXTEND = {\n    match: [\n      /(include|extend)\\s+/,\n      CLASS_NAME_WITH_NAMESPACE_RE\n    ],\n    scope: {\n      2: \"title.class\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const CLASS_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /class\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE,\n          /\\s+<\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      },\n      {\n        match: [\n          /\\b(class|module)\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  const METHOD_DEFINITION = {\n    match: [\n      /def/, /\\s+/,\n      RUBY_METHOD_RE\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  const OBJECT_CREATION = {\n    relevance: 0,\n    match: [\n      CLASS_NAME_WITH_NAMESPACE_RE,\n      /\\.new[. (]/\n    ],\n    scope: {\n      1: \"title.class\"\n    }\n  };\n\n  // CamelCase\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match: CLASS_NAME_RE,\n    scope: \"title.class\"\n  };\n\n  const RUBY_DEFAULT_CONTAINS = [\n    STRING,\n    CLASS_DEFINITION,\n    INCLUDE_EXTEND,\n    OBJECT_CREATION,\n    UPPER_CASE_CONSTANT,\n    CLASS_REFERENCE,\n    METHOD_DEFINITION,\n    {\n      // swallow namespace qualifiers before symbols\n      begin: hljs.IDENT_RE + '::' },\n    {\n      className: 'symbol',\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ':(?!\\\\s)',\n      contains: [\n        STRING,\n        { begin: RUBY_METHOD_RE }\n      ],\n      relevance: 0\n    },\n    NUMBER,\n    {\n      // negative-look forward attempts to prevent false matches like:\n      // @ident@ or $ident$ that might indicate this is not ruby at all\n      className: \"variable\",\n      begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n    },\n    {\n      className: 'params',\n      begin: /\\|/,\n      end: /\\|/,\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0, // this could be a lot of things (in other languages) other than params\n      keywords: RUBY_KEYWORDS\n    },\n    { // regexp container\n      begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n      keywords: 'unless',\n      contains: [\n        {\n          className: 'regexp',\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ],\n          illegal: /\\n/,\n          variants: [\n            {\n              begin: '/',\n              end: '/[a-z]*'\n            },\n            {\n              begin: /%r\\{/,\n              end: /\\}[a-z]*/\n            },\n            {\n              begin: '%r\\\\(',\n              end: '\\\\)[a-z]*'\n            },\n            {\n              begin: '%r!',\n              end: '![a-z]*'\n            },\n            {\n              begin: '%r\\\\[',\n              end: '\\\\][a-z]*'\n            }\n          ]\n        }\n      ].concat(IRB_OBJECT, COMMENT_MODES),\n      relevance: 0\n    }\n  ].concat(IRB_OBJECT, COMMENT_MODES);\n\n  SUBST.contains = RUBY_DEFAULT_CONTAINS;\n  PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n  // >>\n  // ?>\n  const SIMPLE_PROMPT = \"[>?]>\";\n  // irb(main):001:0>\n  const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]\";\n  const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n  const IRB_DEFAULT = [\n    {\n      begin: /^\\s*=>/,\n      starts: {\n        end: '$',\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    },\n    {\n      className: 'meta.prompt',\n      begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n      starts: {\n        end: '$',\n        keywords: RUBY_KEYWORDS,\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    }\n  ];\n\n  COMMENT_MODES.unshift(IRB_OBJECT);\n\n  return {\n    name: 'Ruby',\n    aliases: [\n      'rb',\n      'gemspec',\n      'podspec',\n      'thor',\n      'irb'\n    ],\n    keywords: RUBY_KEYWORDS,\n    illegal: /\\/\\*/,\n    contains: [ hljs.SHEBANG({ binary: \"ruby\" }) ]\n      .concat(IRB_DEFAULT)\n      .concat(COMMENT_MODES)\n      .concat(RUBY_DEFAULT_CONTAINS)\n  };\n}\n\nexport { ruby as default };\n", "/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\nfunction rust(hljs) {\n  const regex = hljs.regex;\n  const FUNCTION_INVOKE = {\n    className: \"title.function.invoke\",\n    relevance: 0,\n    begin: regex.concat(\n      /\\b/,\n      /(?!let|for|while|if|else|match\\b)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/\\s*\\(/))\n  };\n  const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n  const KEYWORDS = [\n    \"abstract\",\n    \"as\",\n    \"async\",\n    \"await\",\n    \"become\",\n    \"box\",\n    \"break\",\n    \"const\",\n    \"continue\",\n    \"crate\",\n    \"do\",\n    \"dyn\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"false\",\n    \"final\",\n    \"fn\",\n    \"for\",\n    \"if\",\n    \"impl\",\n    \"in\",\n    \"let\",\n    \"loop\",\n    \"macro\",\n    \"match\",\n    \"mod\",\n    \"move\",\n    \"mut\",\n    \"override\",\n    \"priv\",\n    \"pub\",\n    \"ref\",\n    \"return\",\n    \"self\",\n    \"Self\",\n    \"static\",\n    \"struct\",\n    \"super\",\n    \"trait\",\n    \"true\",\n    \"try\",\n    \"type\",\n    \"typeof\",\n    \"unsafe\",\n    \"unsized\",\n    \"use\",\n    \"virtual\",\n    \"where\",\n    \"while\",\n    \"yield\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"Some\",\n    \"None\",\n    \"Ok\",\n    \"Err\"\n  ];\n  const BUILTINS = [\n    // functions\n    'drop ',\n    // traits\n    \"Copy\",\n    \"Send\",\n    \"Sized\",\n    \"Sync\",\n    \"Drop\",\n    \"Fn\",\n    \"FnMut\",\n    \"FnOnce\",\n    \"ToOwned\",\n    \"Clone\",\n    \"Debug\",\n    \"PartialEq\",\n    \"PartialOrd\",\n    \"Eq\",\n    \"Ord\",\n    \"AsRef\",\n    \"AsMut\",\n    \"Into\",\n    \"From\",\n    \"Default\",\n    \"Iterator\",\n    \"Extend\",\n    \"IntoIterator\",\n    \"DoubleEndedIterator\",\n    \"ExactSizeIterator\",\n    \"SliceConcatExt\",\n    \"ToString\",\n    // macros\n    \"assert!\",\n    \"assert_eq!\",\n    \"bitflags!\",\n    \"bytes!\",\n    \"cfg!\",\n    \"col!\",\n    \"concat!\",\n    \"concat_idents!\",\n    \"debug_assert!\",\n    \"debug_assert_eq!\",\n    \"env!\",\n    \"eprintln!\",\n    \"panic!\",\n    \"file!\",\n    \"format!\",\n    \"format_args!\",\n    \"include_bytes!\",\n    \"include_str!\",\n    \"line!\",\n    \"local_data_key!\",\n    \"module_path!\",\n    \"option_env!\",\n    \"print!\",\n    \"println!\",\n    \"select!\",\n    \"stringify!\",\n    \"try!\",\n    \"unimplemented!\",\n    \"unreachable!\",\n    \"vec!\",\n    \"write!\",\n    \"writeln!\",\n    \"macro_rules!\",\n    \"assert_ne!\",\n    \"debug_assert_ne!\"\n  ];\n  const TYPES = [\n    \"i8\",\n    \"i16\",\n    \"i32\",\n    \"i64\",\n    \"i128\",\n    \"isize\",\n    \"u8\",\n    \"u16\",\n    \"u32\",\n    \"u64\",\n    \"u128\",\n    \"usize\",\n    \"f32\",\n    \"f64\",\n    \"str\",\n    \"char\",\n    \"bool\",\n    \"Box\",\n    \"Option\",\n    \"Result\",\n    \"String\",\n    \"Vec\"\n  ];\n  return {\n    name: 'Rust',\n    aliases: [ 'rs' ],\n    keywords: {\n      $pattern: hljs.IDENT_RE + '!?',\n      type: TYPES,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: BUILTINS\n    },\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {\n        begin: /b?\"/,\n        illegal: null\n      }),\n      {\n        className: 'string',\n        variants: [\n          { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n          { begin: /b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/ }\n        ]\n      },\n      {\n        className: 'symbol',\n        begin: /'[a-zA-Z_][a-zA-Z0-9_]*/\n      },\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n                   + NUMBER_SUFFIX }\n        ],\n        relevance: 0\n      },\n      {\n        begin: [\n          /fn/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.function\"\n        }\n      },\n      {\n        className: 'meta',\n        begin: '#!?\\\\[',\n        end: '\\\\]',\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/\n          }\n        ]\n      },\n      {\n        begin: [\n          /let/,\n          /\\s+/,\n          /(?:mut\\s+)?/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"keyword\",\n          4: \"variable\"\n        }\n      },\n      // must come before impl/for rule later\n      {\n        begin: [\n          /for/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s+/,\n          /in/\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"variable\",\n          5: \"keyword\"\n        }\n      },\n      {\n        begin: [\n          /type/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: [\n          /(?:trait|enum|struct|union|impl|for)/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: hljs.IDENT_RE + '::',\n        keywords: {\n          keyword: \"Self\",\n          built_in: BUILTINS,\n          type: TYPES\n        }\n      },\n      {\n        className: \"punctuation\",\n        begin: '->'\n      },\n      FUNCTION_INVOKE\n    ]\n  };\n}\n\nexport { rust as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n/*\nLanguage: SCSS\nDescription: Scss is an extension of the syntax of CSS.\nAuthor: Kurt Emch <kurt@kurtemch.com>\nWebsite: https://sass-lang.com\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction scss(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_ELEMENTS$1 = PSEUDO_ELEMENTS;\n  const PSEUDO_CLASSES$1 = PSEUDO_CLASSES;\n\n  const AT_IDENTIFIER = '@[a-z-]+'; // @font-face\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b',\n    relevance: 0\n  };\n\n  return {\n    name: 'SCSS',\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: '#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        // was there, before, but why?\n        relevance: 0\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES$1.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS$1.join('|') + ')'\n      },\n      VARIABLE,\n      { // pseudo-selector params\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ modes.CSS_NUMBER_MODE ]\n      },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      { begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b' },\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        relevance: 0,\n        contains: [\n          modes.BLOCK_COMMENT,\n          VARIABLE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.IMPORTANT,\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      // matching these here allows us to treat them more like regular CSS\n      // rules so everything between the {} gets regular rule highlighting,\n      // which is what we want for page and font-face\n      {\n        begin: '@(page|font-face)',\n        keywords: {\n          $pattern: AT_IDENTIFIER,\n          keyword: '@page @font-face'\n        }\n      },\n      {\n        begin: '@',\n        end: '[{;]',\n        returnBegin: true,\n        keywords: {\n          $pattern: /[a-z-]+/,\n          keyword: AT_MODIFIERS,\n          attribute: MEDIA_FEATURES.join(\" \")\n        },\n        contains: [\n          {\n            begin: AT_IDENTIFIER,\n            className: \"keyword\"\n          },\n          {\n            begin: /[a-z-]+(?=:)/,\n            className: \"attribute\"\n          },\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE\n        ]\n      },\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n}\n\nexport { scss as default };\n", "/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n  return {\n    name: 'Shell Session',\n    aliases: [\n      'console',\n      'shellsession'\n    ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n        // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n        // echo /path/to/home > t.exe\n        begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,\n        starts: {\n          end: /[^\\\\](?=\\s*$)/,\n          subLanguage: 'bash'\n        }\n      }\n    ]\n  };\n}\n\nexport { shell as default };\n", "/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n  PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n  - PostgreSQL and PL/pgSQL - core\n  - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n  - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n  const regex = hljs.regex;\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [ { begin: /''/ } ]\n      }\n    ]\n  };\n  const QUOTED_IDENTIFIER = {\n    begin: /\"/,\n    end: /\"/,\n    contains: [ { begin: /\"\"/ } ]\n  };\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n    // \"null\",\n    \"unknown\"\n  ];\n\n  const MULTI_WORD_TYPES = [\n    \"double precision\",\n    \"large object\",\n    \"with timezone\",\n    \"without timezone\"\n  ];\n\n  const TYPES = [\n    'bigint',\n    'binary',\n    'blob',\n    'boolean',\n    'char',\n    'character',\n    'clob',\n    'date',\n    'dec',\n    'decfloat',\n    'decimal',\n    'float',\n    'int',\n    'integer',\n    'interval',\n    'nchar',\n    'nclob',\n    'national',\n    'numeric',\n    'real',\n    'row',\n    'smallint',\n    'time',\n    'timestamp',\n    'varchar',\n    'varying', // modifier (character varying)\n    'varbinary'\n  ];\n\n  const NON_RESERVED_WORDS = [\n    \"add\",\n    \"asc\",\n    \"collation\",\n    \"desc\",\n    \"final\",\n    \"first\",\n    \"last\",\n    \"view\"\n  ];\n\n  // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n  const RESERVED_WORDS = [\n    \"abs\",\n    \"acos\",\n    \"all\",\n    \"allocate\",\n    \"alter\",\n    \"and\",\n    \"any\",\n    \"are\",\n    \"array\",\n    \"array_agg\",\n    \"array_max_cardinality\",\n    \"as\",\n    \"asensitive\",\n    \"asin\",\n    \"asymmetric\",\n    \"at\",\n    \"atan\",\n    \"atomic\",\n    \"authorization\",\n    \"avg\",\n    \"begin\",\n    \"begin_frame\",\n    \"begin_partition\",\n    \"between\",\n    \"bigint\",\n    \"binary\",\n    \"blob\",\n    \"boolean\",\n    \"both\",\n    \"by\",\n    \"call\",\n    \"called\",\n    \"cardinality\",\n    \"cascaded\",\n    \"case\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"char\",\n    \"char_length\",\n    \"character\",\n    \"character_length\",\n    \"check\",\n    \"classifier\",\n    \"clob\",\n    \"close\",\n    \"coalesce\",\n    \"collate\",\n    \"collect\",\n    \"column\",\n    \"commit\",\n    \"condition\",\n    \"connect\",\n    \"constraint\",\n    \"contains\",\n    \"convert\",\n    \"copy\",\n    \"corr\",\n    \"corresponding\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"create\",\n    \"cross\",\n    \"cube\",\n    \"cume_dist\",\n    \"current\",\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_row\",\n    \"current_schema\",\n    \"current_time\",\n    \"current_timestamp\",\n    \"current_path\",\n    \"current_role\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"cursor\",\n    \"cycle\",\n    \"date\",\n    \"day\",\n    \"deallocate\",\n    \"dec\",\n    \"decimal\",\n    \"decfloat\",\n    \"declare\",\n    \"default\",\n    \"define\",\n    \"delete\",\n    \"dense_rank\",\n    \"deref\",\n    \"describe\",\n    \"deterministic\",\n    \"disconnect\",\n    \"distinct\",\n    \"double\",\n    \"drop\",\n    \"dynamic\",\n    \"each\",\n    \"element\",\n    \"else\",\n    \"empty\",\n    \"end\",\n    \"end_frame\",\n    \"end_partition\",\n    \"end-exec\",\n    \"equals\",\n    \"escape\",\n    \"every\",\n    \"except\",\n    \"exec\",\n    \"execute\",\n    \"exists\",\n    \"exp\",\n    \"external\",\n    \"extract\",\n    \"false\",\n    \"fetch\",\n    \"filter\",\n    \"first_value\",\n    \"float\",\n    \"floor\",\n    \"for\",\n    \"foreign\",\n    \"frame_row\",\n    \"free\",\n    \"from\",\n    \"full\",\n    \"function\",\n    \"fusion\",\n    \"get\",\n    \"global\",\n    \"grant\",\n    \"group\",\n    \"grouping\",\n    \"groups\",\n    \"having\",\n    \"hold\",\n    \"hour\",\n    \"identity\",\n    \"in\",\n    \"indicator\",\n    \"initial\",\n    \"inner\",\n    \"inout\",\n    \"insensitive\",\n    \"insert\",\n    \"int\",\n    \"integer\",\n    \"intersect\",\n    \"intersection\",\n    \"interval\",\n    \"into\",\n    \"is\",\n    \"join\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"language\",\n    \"large\",\n    \"last_value\",\n    \"lateral\",\n    \"lead\",\n    \"leading\",\n    \"left\",\n    \"like\",\n    \"like_regex\",\n    \"listagg\",\n    \"ln\",\n    \"local\",\n    \"localtime\",\n    \"localtimestamp\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"match\",\n    \"match_number\",\n    \"match_recognize\",\n    \"matches\",\n    \"max\",\n    \"member\",\n    \"merge\",\n    \"method\",\n    \"min\",\n    \"minute\",\n    \"mod\",\n    \"modifies\",\n    \"module\",\n    \"month\",\n    \"multiset\",\n    \"national\",\n    \"natural\",\n    \"nchar\",\n    \"nclob\",\n    \"new\",\n    \"no\",\n    \"none\",\n    \"normalize\",\n    \"not\",\n    \"nth_value\",\n    \"ntile\",\n    \"null\",\n    \"nullif\",\n    \"numeric\",\n    \"octet_length\",\n    \"occurrences_regex\",\n    \"of\",\n    \"offset\",\n    \"old\",\n    \"omit\",\n    \"on\",\n    \"one\",\n    \"only\",\n    \"open\",\n    \"or\",\n    \"order\",\n    \"out\",\n    \"outer\",\n    \"over\",\n    \"overlaps\",\n    \"overlay\",\n    \"parameter\",\n    \"partition\",\n    \"pattern\",\n    \"per\",\n    \"percent\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"period\",\n    \"portion\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"precedes\",\n    \"precision\",\n    \"prepare\",\n    \"primary\",\n    \"procedure\",\n    \"ptf\",\n    \"range\",\n    \"rank\",\n    \"reads\",\n    \"real\",\n    \"recursive\",\n    \"ref\",\n    \"references\",\n    \"referencing\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"release\",\n    \"result\",\n    \"return\",\n    \"returns\",\n    \"revoke\",\n    \"right\",\n    \"rollback\",\n    \"rollup\",\n    \"row\",\n    \"row_number\",\n    \"rows\",\n    \"running\",\n    \"savepoint\",\n    \"scope\",\n    \"scroll\",\n    \"search\",\n    \"second\",\n    \"seek\",\n    \"select\",\n    \"sensitive\",\n    \"session_user\",\n    \"set\",\n    \"show\",\n    \"similar\",\n    \"sin\",\n    \"sinh\",\n    \"skip\",\n    \"smallint\",\n    \"some\",\n    \"specific\",\n    \"specifictype\",\n    \"sql\",\n    \"sqlexception\",\n    \"sqlstate\",\n    \"sqlwarning\",\n    \"sqrt\",\n    \"start\",\n    \"static\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"submultiset\",\n    \"subset\",\n    \"substring\",\n    \"substring_regex\",\n    \"succeeds\",\n    \"sum\",\n    \"symmetric\",\n    \"system\",\n    \"system_time\",\n    \"system_user\",\n    \"table\",\n    \"tablesample\",\n    \"tan\",\n    \"tanh\",\n    \"then\",\n    \"time\",\n    \"timestamp\",\n    \"timezone_hour\",\n    \"timezone_minute\",\n    \"to\",\n    \"trailing\",\n    \"translate\",\n    \"translate_regex\",\n    \"translation\",\n    \"treat\",\n    \"trigger\",\n    \"trim\",\n    \"trim_array\",\n    \"true\",\n    \"truncate\",\n    \"uescape\",\n    \"union\",\n    \"unique\",\n    \"unknown\",\n    \"unnest\",\n    \"update\",\n    \"upper\",\n    \"user\",\n    \"using\",\n    \"value\",\n    \"values\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"varbinary\",\n    \"varchar\",\n    \"varying\",\n    \"versioning\",\n    \"when\",\n    \"whenever\",\n    \"where\",\n    \"width_bucket\",\n    \"window\",\n    \"with\",\n    \"within\",\n    \"without\",\n    \"year\",\n  ];\n\n  // these are reserved words we have identified to be functions\n  // and should only be highlighted in a dispatch-like context\n  // ie, array_agg(...), etc.\n  const RESERVED_FUNCTIONS = [\n    \"abs\",\n    \"acos\",\n    \"array_agg\",\n    \"asin\",\n    \"atan\",\n    \"avg\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"coalesce\",\n    \"corr\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"cume_dist\",\n    \"dense_rank\",\n    \"deref\",\n    \"element\",\n    \"exp\",\n    \"extract\",\n    \"first_value\",\n    \"floor\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"last_value\",\n    \"lead\",\n    \"listagg\",\n    \"ln\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"max\",\n    \"min\",\n    \"mod\",\n    \"nth_value\",\n    \"ntile\",\n    \"nullif\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"rank\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"row_number\",\n    \"sin\",\n    \"sinh\",\n    \"sqrt\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"substring\",\n    \"substring_regex\",\n    \"sum\",\n    \"tan\",\n    \"tanh\",\n    \"translate\",\n    \"translate_regex\",\n    \"treat\",\n    \"trim\",\n    \"trim_array\",\n    \"unnest\",\n    \"upper\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"width_bucket\",\n  ];\n\n  // these functions can\n  const POSSIBLE_WITHOUT_PARENS = [\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_schema\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"session_user\",\n    \"system_time\",\n    \"system_user\",\n    \"current_time\",\n    \"localtime\",\n    \"current_timestamp\",\n    \"localtimestamp\"\n  ];\n\n  // those exist to boost relevance making these very\n  // \"SQL like\" keyword combos worth +1 extra relevance\n  const COMBOS = [\n    \"create table\",\n    \"insert into\",\n    \"primary key\",\n    \"foreign key\",\n    \"not null\",\n    \"alter table\",\n    \"add constraint\",\n    \"grouping sets\",\n    \"on overflow\",\n    \"character set\",\n    \"respect nulls\",\n    \"ignore nulls\",\n    \"nulls first\",\n    \"nulls last\",\n    \"depth first\",\n    \"breadth first\"\n  ];\n\n  const FUNCTIONS = RESERVED_FUNCTIONS;\n\n  const KEYWORDS = [\n    ...RESERVED_WORDS,\n    ...NON_RESERVED_WORDS\n  ].filter((keyword) => {\n    return !RESERVED_FUNCTIONS.includes(keyword);\n  });\n\n  const VARIABLE = {\n    className: \"variable\",\n    begin: /@[a-z0-9][a-z0-9_]*/,\n  };\n\n  const OPERATOR = {\n    className: \"operator\",\n    begin: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n    relevance: 0,\n  };\n\n  const FUNCTION_CALL = {\n    begin: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n    relevance: 0,\n    keywords: { built_in: FUNCTIONS }\n  };\n\n  // keywords with less than 3 letters are reduced in relevancy\n  function reduceRelevancy(list, {\n    exceptions, when\n  } = {}) {\n    const qualifyFn = when;\n    exceptions = exceptions || [];\n    return list.map((item) => {\n      if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n        return item;\n      } else if (qualifyFn(item)) {\n        return `${item}|0`;\n      } else {\n        return item;\n      }\n    });\n  }\n\n  return {\n    name: 'SQL',\n    case_insensitive: true,\n    // does not include {} or HTML tags `</`\n    illegal: /[{}]|<\\//,\n    keywords: {\n      $pattern: /\\b[\\w\\.]+/,\n      keyword:\n        reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n      literal: LITERALS,\n      type: TYPES,\n      built_in: POSSIBLE_WITHOUT_PARENS\n    },\n    contains: [\n      {\n        begin: regex.either(...COMBOS),\n        relevance: 0,\n        keywords: {\n          $pattern: /[\\w\\.]+/,\n          keyword: KEYWORDS.concat(COMBOS),\n          literal: LITERALS,\n          type: TYPES\n        },\n      },\n      {\n        className: \"type\",\n        begin: regex.either(...MULTI_WORD_TYPES)\n      },\n      FUNCTION_CALL,\n      VARIABLE,\n      STRING,\n      QUOTED_IDENTIFIER,\n      hljs.C_NUMBER_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      COMMENT_MODE,\n      OPERATOR\n    ]\n  };\n}\n\nexport { sql as default };\n", "/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\nconst keywordWrapper = keyword => concat(\n  /\\b/,\n  keyword,\n  /\\w$/.test(keyword) ? /\\b/ : /\\B/\n);\n\n// Keywords that require a leading dot.\nconst dotKeywords = [\n  'Protocol', // contextual\n  'Type' // contextual\n].map(keywordWrapper);\n\n// Keywords that may have a leading dot.\nconst optionalDotKeywords = [\n  'init',\n  'self'\n].map(keywordWrapper);\n\n// should register as keyword, not type\nconst keywordTypes = [\n  'Any',\n  'Self'\n];\n\n// Regular keywords and literals.\nconst keywords = [\n  // strings below will be fed into the regular `keywords` engine while regex\n  // will result in additional modes being created to scan for those keywords to\n  // avoid conflicts with other rules\n  'actor',\n  'any', // contextual\n  'associatedtype',\n  'async',\n  'await',\n  /as\\?/, // operator\n  /as!/, // operator\n  'as', // operator\n  'borrowing', // contextual\n  'break',\n  'case',\n  'catch',\n  'class',\n  'consume', // contextual\n  'consuming', // contextual\n  'continue',\n  'convenience', // contextual\n  'copy', // contextual\n  'default',\n  'defer',\n  'deinit',\n  'didSet', // contextual\n  'distributed',\n  'do',\n  'dynamic', // contextual\n  'each',\n  'else',\n  'enum',\n  'extension',\n  'fallthrough',\n  /fileprivate\\(set\\)/,\n  'fileprivate',\n  'final', // contextual\n  'for',\n  'func',\n  'get', // contextual\n  'guard',\n  'if',\n  'import',\n  'indirect', // contextual\n  'infix', // contextual\n  /init\\?/,\n  /init!/,\n  'inout',\n  /internal\\(set\\)/,\n  'internal',\n  'in',\n  'is', // operator\n  'isolated', // contextual\n  'nonisolated', // contextual\n  'lazy', // contextual\n  'let',\n  'macro',\n  'mutating', // contextual\n  'nonmutating', // contextual\n  /open\\(set\\)/, // contextual\n  'open', // contextual\n  'operator',\n  'optional', // contextual\n  'override', // contextual\n  'postfix', // contextual\n  'precedencegroup',\n  'prefix', // contextual\n  /private\\(set\\)/,\n  'private',\n  'protocol',\n  /public\\(set\\)/,\n  'public',\n  'repeat',\n  'required', // contextual\n  'rethrows',\n  'return',\n  'set', // contextual\n  'some', // contextual\n  'static',\n  'struct',\n  'subscript',\n  'super',\n  'switch',\n  'throws',\n  'throw',\n  /try\\?/, // operator\n  /try!/, // operator\n  'try', // operator\n  'typealias',\n  /unowned\\(safe\\)/, // contextual\n  /unowned\\(unsafe\\)/, // contextual\n  'unowned', // contextual\n  'var',\n  'weak', // contextual\n  'where',\n  'while',\n  'willSet' // contextual\n];\n\n// NOTE: Contextual keywords are reserved only in specific contexts.\n// Ideally, these should be matched using modes to avoid false positives.\n\n// Literals.\nconst literals = [\n  'false',\n  'nil',\n  'true'\n];\n\n// Keywords used in precedence groups.\nconst precedencegroupKeywords = [\n  'assignment',\n  'associativity',\n  'higherThan',\n  'left',\n  'lowerThan',\n  'none',\n  'right'\n];\n\n// Keywords that start with a number sign (#).\n// #(un)available is handled separately.\nconst numberSignKeywords = [\n  '#colorLiteral',\n  '#column',\n  '#dsohandle',\n  '#else',\n  '#elseif',\n  '#endif',\n  '#error',\n  '#file',\n  '#fileID',\n  '#fileLiteral',\n  '#filePath',\n  '#function',\n  '#if',\n  '#imageLiteral',\n  '#keyPath',\n  '#line',\n  '#selector',\n  '#sourceLocation',\n  '#warning'\n];\n\n// Global functions in the Standard Library.\nconst builtIns = [\n  'abs',\n  'all',\n  'any',\n  'assert',\n  'assertionFailure',\n  'debugPrint',\n  'dump',\n  'fatalError',\n  'getVaList',\n  'isKnownUniquelyReferenced',\n  'max',\n  'min',\n  'numericCast',\n  'pointwiseMax',\n  'pointwiseMin',\n  'precondition',\n  'preconditionFailure',\n  'print',\n  'readLine',\n  'repeatElement',\n  'sequence',\n  'stride',\n  'swap',\n  'swift_unboxFromSwiftValueWithType',\n  'transcode',\n  'type',\n  'unsafeBitCast',\n  'unsafeDowncast',\n  'withExtendedLifetime',\n  'withUnsafeMutablePointer',\n  'withUnsafePointer',\n  'withVaList',\n  'withoutActuallyEscaping',\n  'zip'\n];\n\n// Valid first characters for operators.\nconst operatorHead = either(\n  /[/=\\-+!*%<>&|^~?]/,\n  /[\\u00A1-\\u00A7]/,\n  /[\\u00A9\\u00AB]/,\n  /[\\u00AC\\u00AE]/,\n  /[\\u00B0\\u00B1]/,\n  /[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]/,\n  /[\\u2016-\\u2017]/,\n  /[\\u2020-\\u2027]/,\n  /[\\u2030-\\u203E]/,\n  /[\\u2041-\\u2053]/,\n  /[\\u2055-\\u205E]/,\n  /[\\u2190-\\u23FF]/,\n  /[\\u2500-\\u2775]/,\n  /[\\u2794-\\u2BFF]/,\n  /[\\u2E00-\\u2E7F]/,\n  /[\\u3001-\\u3003]/,\n  /[\\u3008-\\u3020]/,\n  /[\\u3030]/\n);\n\n// Valid characters for operators.\nconst operatorCharacter = either(\n  operatorHead,\n  /[\\u0300-\\u036F]/,\n  /[\\u1DC0-\\u1DFF]/,\n  /[\\u20D0-\\u20FF]/,\n  /[\\uFE00-\\uFE0F]/,\n  /[\\uFE20-\\uFE2F]/\n  // TODO: The following characters are also allowed, but the regex isn't supported yet.\n  // /[\\u{E0100}-\\u{E01EF}]/u\n);\n\n// Valid operator.\nconst operator = concat(operatorHead, operatorCharacter, '*');\n\n// Valid first characters for identifiers.\nconst identifierHead = either(\n  /[a-zA-Z_]/,\n  /[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]/,\n  /[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]/,\n  /[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]/,\n  /[\\u1E00-\\u1FFF]/,\n  /[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]/,\n  /[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]/,\n  /[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]/,\n  /[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]/,\n  /[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]/,\n  /[\\uFE47-\\uFEFE\\uFF00-\\uFFFD]/ // Should be /[\\uFE47-\\uFFFD]/, but we have to exclude FEFF.\n  // The following characters are also allowed, but the regexes aren't supported yet.\n  // /[\\u{10000}-\\u{1FFFD}\\u{20000-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}]/u,\n  // /[\\u{50000}-\\u{5FFFD}\\u{60000-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}]/u,\n  // /[\\u{90000}-\\u{9FFFD}\\u{A0000-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}]/u,\n  // /[\\u{D0000}-\\u{DFFFD}\\u{E0000-\\u{EFFFD}]/u\n);\n\n// Valid characters for identifiers.\nconst identifierCharacter = either(\n  identifierHead,\n  /\\d/,\n  /[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/\n);\n\n// Valid identifier.\nconst identifier = concat(identifierHead, identifierCharacter, '*');\n\n// Valid type identifier.\nconst typeIdentifier = concat(/[A-Z]/, identifierCharacter, '*');\n\n// Built-in attributes, which are highlighted as keywords.\n// @available is handled separately.\n// https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes\nconst keywordAttributes = [\n  'attached',\n  'autoclosure',\n  concat(/convention\\(/, either('swift', 'block', 'c'), /\\)/),\n  'discardableResult',\n  'dynamicCallable',\n  'dynamicMemberLookup',\n  'escaping',\n  'freestanding',\n  'frozen',\n  'GKInspectable',\n  'IBAction',\n  'IBDesignable',\n  'IBInspectable',\n  'IBOutlet',\n  'IBSegueAction',\n  'inlinable',\n  'main',\n  'nonobjc',\n  'NSApplicationMain',\n  'NSCopying',\n  'NSManaged',\n  concat(/objc\\(/, identifier, /\\)/),\n  'objc',\n  'objcMembers',\n  'propertyWrapper',\n  'requires_stored_property_inits',\n  'resultKhulnasoft',\n  'Sendable',\n  'testable',\n  'UIApplicationMain',\n  'unchecked',\n  'unknown',\n  'usableFromInline',\n  'warn_unqualified_access'\n];\n\n// Contextual keywords used in @available and #(un)available.\nconst availabilityKeywords = [\n  'iOS',\n  'iOSApplicationExtension',\n  'macOS',\n  'macOSApplicationExtension',\n  'macCatalyst',\n  'macCatalystApplicationExtension',\n  'watchOS',\n  'watchOSApplicationExtension',\n  'tvOS',\n  'tvOSApplicationExtension',\n  'swift'\n];\n\n/*\nLanguage: Swift\nDescription: Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.\nAuthor: Steven Van Impe <steven.vanimpe@icloud.com>\nContributors: Chris Eidhof <chris@eidhof.nl>, Nate Cook <natecook@gmail.com>, Alexander Lichter <manniL@gmx.net>, Richard Gibson <gibson042@github>\nWebsite: https://swift.org\nCategory: common, system\n*/\n\n\n/** @type LanguageFn */\nfunction swift(hljs) {\n  const WHITESPACE = {\n    match: /\\s+/,\n    relevance: 0\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID411\n  const BLOCK_COMMENT = hljs.COMMENT(\n    '/\\\\*',\n    '\\\\*/',\n    { contains: [ 'self' ] }\n  );\n  const COMMENTS = [\n    hljs.C_LINE_COMMENT_MODE,\n    BLOCK_COMMENT\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413\n  // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html\n  const DOT_KEYWORD = {\n    match: [\n      /\\./,\n      either(...dotKeywords, ...optionalDotKeywords)\n    ],\n    className: { 2: \"keyword\" }\n  };\n  const KEYWORD_GUARD = {\n    // Consume .keyword to prevent highlighting properties and methods as keywords.\n    match: concat(/\\./, either(...keywords)),\n    relevance: 0\n  };\n  const PLAIN_KEYWORDS = keywords\n    .filter(kw => typeof kw === 'string')\n    .concat([ \"_|0\" ]); // seems common, so 0 relevance\n  const REGEX_KEYWORDS = keywords\n    .filter(kw => typeof kw !== 'string') // find regex\n    .concat(keywordTypes)\n    .map(keywordWrapper);\n  const KEYWORD = { variants: [\n    {\n      className: 'keyword',\n      match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)\n    }\n  ] };\n  // find all the regular keywords\n  const KEYWORDS = {\n    $pattern: either(\n      /\\b\\w+/, // regular keywords\n      /#\\w+/ // number keywords\n    ),\n    keyword: PLAIN_KEYWORDS\n      .concat(numberSignKeywords),\n    literal: literals\n  };\n  const KEYWORD_MODES = [\n    DOT_KEYWORD,\n    KEYWORD_GUARD,\n    KEYWORD\n  ];\n\n  // https://github.com/apple/swift/tree/main/stdlib/public/core\n  const BUILT_IN_GUARD = {\n    // Consume .built_in to prevent highlighting properties and methods.\n    match: concat(/\\./, either(...builtIns)),\n    relevance: 0\n  };\n  const BUILT_IN = {\n    className: 'built_in',\n    match: concat(/\\b/, either(...builtIns), /(?=\\()/)\n  };\n  const BUILT_INS = [\n    BUILT_IN_GUARD,\n    BUILT_IN\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID418\n  const OPERATOR_GUARD = {\n    // Prevent -> from being highlighting as an operator.\n    match: /->/,\n    relevance: 0\n  };\n  const OPERATOR = {\n    className: 'operator',\n    relevance: 0,\n    variants: [\n      { match: operator },\n      {\n        // dot-operator: only operators that start with a dot are allowed to use dots as\n        // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more\n        // characters that may also include dots.\n        match: `\\\\.(\\\\.|${operatorCharacter})+` }\n    ]\n  };\n  const OPERATORS = [\n    OPERATOR_GUARD,\n    OPERATOR\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_numeric-literal\n  // TODO: Update for leading `-` after lookbehind is supported everywhere\n  const decimalDigits = '([0-9]_*)+';\n  const hexDigits = '([0-9a-fA-F]_*)+';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal floating-point-literal (subsumes decimal-literal)\n      { match: `\\\\b(${decimalDigits})(\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\b` },\n      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\n      { match: `\\\\b0x(${hexDigits})(\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\b` },\n      // octal-literal\n      { match: /\\b0o([0-7]_*)+\\b/ },\n      // binary-literal\n      { match: /\\b0b([01]_*)+\\b/ }\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_string-literal\n  const ESCAPED_CHARACTER = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    variants: [\n      { match: concat(/\\\\/, rawDelimiter, /[0\\\\tnr\"']/) },\n      { match: concat(/\\\\/, rawDelimiter, /u\\{[0-9a-fA-F]{1,8}\\}/) }\n    ]\n  });\n  const ESCAPED_NEWLINE = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    match: concat(/\\\\/, rawDelimiter, /[\\t ]*(?:[\\r\\n]|\\r\\n)/)\n  });\n  const INTERPOLATION = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    label: \"interpol\",\n    begin: concat(/\\\\/, rawDelimiter, /\\(/),\n    end: /\\)/\n  });\n  const MULTILINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"\"\"/),\n    end: concat(/\"\"\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      ESCAPED_NEWLINE(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const SINGLE_LINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"/),\n    end: concat(/\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const STRING = {\n    className: 'string',\n    variants: [\n      MULTILINE_STRING(),\n      MULTILINE_STRING(\"#\"),\n      MULTILINE_STRING(\"##\"),\n      MULTILINE_STRING(\"###\"),\n      SINGLE_LINE_STRING(),\n      SINGLE_LINE_STRING(\"#\"),\n      SINGLE_LINE_STRING(\"##\"),\n      SINGLE_LINE_STRING(\"###\")\n    ]\n  };\n\n  const REGEXP_CONTENTS = [\n    hljs.BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [ hljs.BACKSLASH_ESCAPE ]\n    }\n  ];\n\n  const BARE_REGEXP_LITERAL = {\n    begin: /\\/[^\\s](?=[^/\\n]*\\/)/,\n    end: /\\//,\n    contains: REGEXP_CONTENTS\n  };\n\n  const EXTENDED_REGEXP_LITERAL = (rawDelimiter) => {\n    const begin = concat(rawDelimiter, /\\//);\n    const end = concat(/\\//, rawDelimiter);\n    return {\n      begin,\n      end,\n      contains: [\n        ...REGEXP_CONTENTS,\n        {\n          scope: \"comment\",\n          begin: `#(?!.*${end})`,\n          end: /$/,\n        },\n      ],\n    };\n  };\n\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/lexicalstructure/#Regular-Expression-Literals\n  const REGEXP = {\n    scope: \"regexp\",\n    variants: [\n      EXTENDED_REGEXP_LITERAL('###'),\n      EXTENDED_REGEXP_LITERAL('##'),\n      EXTENDED_REGEXP_LITERAL('#'),\n      BARE_REGEXP_LITERAL\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412\n  const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };\n  const IMPLICIT_PARAMETER = {\n    className: 'variable',\n    match: /\\$\\d+/\n  };\n  const PROPERTY_WRAPPER_PROJECTION = {\n    className: 'variable',\n    match: `\\\\$${identifierCharacter}+`\n  };\n  const IDENTIFIERS = [\n    QUOTED_IDENTIFIER,\n    IMPLICIT_PARAMETER,\n    PROPERTY_WRAPPER_PROJECTION\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Attributes.html\n  const AVAILABLE_ATTRIBUTE = {\n    match: /(@|#(un)?)available/,\n    scope: 'keyword',\n    starts: { contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: availabilityKeywords,\n        contains: [\n          ...OPERATORS,\n          NUMBER,\n          STRING\n        ]\n      }\n    ] }\n  };\n  const KEYWORD_ATTRIBUTE = {\n    scope: 'keyword',\n    match: concat(/@/, either(...keywordAttributes))\n  };\n  const USER_DEFINED_ATTRIBUTE = {\n    scope: 'meta',\n    match: concat(/@/, identifier)\n  };\n  const ATTRIBUTES = [\n    AVAILABLE_ATTRIBUTE,\n    KEYWORD_ATTRIBUTE,\n    USER_DEFINED_ATTRIBUTE\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Types.html\n  const TYPE = {\n    match: lookahead(/\\b[A-Z]/),\n    relevance: 0,\n    contains: [\n      { // Common Apple frameworks, for relevance boost\n        className: 'type',\n        match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, '+')\n      },\n      { // Type identifier\n        className: 'type',\n        match: typeIdentifier,\n        relevance: 0\n      },\n      { // Optional type\n        match: /[?!]+/,\n        relevance: 0\n      },\n      { // Variadic parameter\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      { // Protocol composition\n        match: concat(/\\s+&\\s+/, lookahead(typeIdentifier)),\n        relevance: 0\n      }\n    ]\n  };\n  const GENERIC_ARGUMENTS = {\n    begin: /</,\n    end: />/,\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...ATTRIBUTES,\n      OPERATOR_GUARD,\n      TYPE\n    ]\n  };\n  TYPE.contains.push(GENERIC_ARGUMENTS);\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID552\n  // Prevents element names from being highlighted as keywords.\n  const TUPLE_ELEMENT_NAME = {\n    match: concat(identifier, /\\s*:/),\n    keywords: \"_|0\",\n    relevance: 0\n  };\n  // Matches tuples as well as the parameter list of a function type.\n  const TUPLE = {\n    begin: /\\(/,\n    end: /\\)/,\n    relevance: 0,\n    keywords: KEYWORDS,\n    contains: [\n      'self',\n      TUPLE_ELEMENT_NAME,\n      ...COMMENTS,\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE\n    ]\n  };\n\n  const GENERIC_PARAMETERS = {\n    begin: /</,\n    end: />/,\n    keywords: 'repeat each',\n    contains: [\n      ...COMMENTS,\n      TYPE\n    ]\n  };\n  const FUNCTION_PARAMETER_NAME = {\n    begin: either(\n      lookahead(concat(identifier, /\\s*:/)),\n      lookahead(concat(identifier, /\\s+/, identifier, /\\s*:/))\n    ),\n    end: /:/,\n    relevance: 0,\n    contains: [\n      {\n        className: 'keyword',\n        match: /\\b_\\b/\n      },\n      {\n        className: 'params',\n        match: identifier\n      }\n    ]\n  };\n  const FUNCTION_PARAMETERS = {\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      FUNCTION_PARAMETER_NAME,\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ],\n    endsParent: true,\n    illegal: /[\"']/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID362\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/declarations/#Macro-Declaration\n  const FUNCTION_OR_MACRO = {\n    match: [\n      /(func|macro)/,\n      /\\s+/,\n      either(QUOTED_IDENTIFIER.match, identifier, operator)\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: [\n      /\\[/,\n      /%/\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID375\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID379\n  const INIT_SUBSCRIPT = {\n    match: [\n      /\\b(?:subscript|init[?!]?)/,\n      /\\s*(?=[<(])/,\n    ],\n    className: { 1: \"keyword\" },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: /\\[|%/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID380\n  const OPERATOR_DECLARATION = {\n    match: [\n      /operator/,\n      /\\s+/,\n      operator\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    }\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID550\n  const PRECEDENCEGROUP = {\n    begin: [\n      /precedencegroup/,\n      /\\s+/,\n      typeIdentifier\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    },\n    contains: [ TYPE ],\n    keywords: [\n      ...precedencegroupKeywords,\n      ...literals\n    ],\n    end: /}/\n  };\n\n  // Add supported submodes to string interpolation.\n  for (const variant of STRING.variants) {\n    const interpolation = variant.contains.find(mode => mode.label === \"interpol\");\n    // TODO: Interpolation can contain any expression, so there's room for improvement here.\n    interpolation.keywords = KEYWORDS;\n    const submodes = [\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS\n    ];\n    interpolation.contains = [\n      ...submodes,\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          'self',\n          ...submodes\n        ]\n      }\n    ];\n  }\n\n  return {\n    name: 'Swift',\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      FUNCTION_OR_MACRO,\n      INIT_SUBSCRIPT,\n      {\n        beginKeywords: 'struct protocol class extension enum actor',\n        end: '\\\\{',\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {\n            className: \"title.class\",\n            begin: /[A-Za-z$_][\\u00C0-\\u02B80-9A-Za-z$_]*/\n          }),\n          ...KEYWORD_MODES\n        ]\n      },\n      OPERATOR_DECLARATION,\n      PRECEDENCEGROUP,\n      {\n        beginKeywords: 'import',\n        end: /$/,\n        contains: [ ...COMMENTS ],\n        relevance: 0\n      },\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ]\n  };\n}\n\nexport { swift as default };\n", "const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: 'gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ]),\n      IDENT_RE$1, regex.lookahead(/\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        className: 'attr',\n        begin: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n  const tsLanguage = javascript(hljs);\n\n  const IDENT_RE$1 = IDENT_RE;\n  const TYPES = [\n    \"any\",\n    \"void\",\n    \"number\",\n    \"boolean\",\n    \"string\",\n    \"object\",\n    \"never\",\n    \"symbol\",\n    \"bigint\",\n    \"unknown\"\n  ];\n  const NAMESPACE = {\n    beginKeywords: 'namespace',\n    end: /\\{/,\n    excludeEnd: true,\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const INTERFACE = {\n    beginKeywords: 'interface',\n    end: /\\{/,\n    excludeEnd: true,\n    keywords: {\n      keyword: 'interface extends',\n      built_in: TYPES\n    },\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const USE_STRICT = {\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use strict['\"]/\n  };\n  const TS_SPECIFIC_KEYWORDS = [\n    \"type\",\n    \"namespace\",\n    \"interface\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"implements\",\n    \"declare\",\n    \"abstract\",\n    \"readonly\",\n    \"enum\",\n    \"override\"\n  ];\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n    literal: LITERALS,\n    built_in: BUILT_INS.concat(TYPES),\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n  const DECORATOR = {\n    className: 'meta',\n    begin: '@' + IDENT_RE$1,\n  };\n\n  const swapMode = (mode, label, replacement) => {\n    const indx = mode.contains.findIndex(m => m.label === label);\n    if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n    mode.contains.splice(indx, 1, replacement);\n  };\n\n\n  // this should update anywhere keywords is used since\n  // it will be the same actual JS object\n  Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n  tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n  tsLanguage.contains = tsLanguage.contains.concat([\n    DECORATOR,\n    NAMESPACE,\n    INTERFACE,\n  ]);\n\n  // TS gets a simpler shebang rule than JS\n  swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n  // JS use strict rule purposely excludes `asm` which makes no sense\n  swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n  const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n  functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n  Object.assign(tsLanguage, {\n    name: 'TypeScript',\n    aliases: [\n      'ts',\n      'tsx',\n      'mts',\n      'cts'\n    ]\n  });\n\n  return tsLanguage;\n}\n\nexport { typescript as default };\n", "/*\nLanguage: Visual Basic .NET\nDescription: Visual Basic .NET (VB.NET) is a multi-paradigm, object-oriented programming language, implemented on the .NET Framework.\nAuthors: Poren Chiang <ren.chiang@gmail.com>, Jan Pilzer\nWebsite: https://docs.microsoft.com/dotnet/visual-basic/getting-started\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction vbnet(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Character Literal\n   * Either a single character (\"a\"C) or an escaped double quote (\"\"\"\"C).\n   */\n  const CHARACTER = {\n    className: 'string',\n    begin: /\"(\"\"|[^/n])\"C\\b/\n  };\n\n  const STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    illegal: /\\n/,\n    contains: [\n      {\n        // double quote escape\n        begin: /\"\"/ }\n    ]\n  };\n\n  /** Date Literals consist of a date, a time, or both separated by whitespace, surrounded by # */\n  const MM_DD_YYYY = /\\d{1,2}\\/\\d{1,2}\\/\\d{4}/;\n  const YYYY_MM_DD = /\\d{4}-\\d{1,2}-\\d{1,2}/;\n  const TIME_12H = /(\\d|1[012])(:\\d+){0,2} *(AM|PM)/;\n  const TIME_24H = /\\d{1,2}(:\\d{1,2}){1,2}/;\n  const DATE = {\n    className: 'literal',\n    variants: [\n      {\n        // #YYYY-MM-DD# (ISO-Date) or #M/D/YYYY# (US-Date)\n        begin: regex.concat(/# */, regex.either(YYYY_MM_DD, MM_DD_YYYY), / *#/) },\n      {\n        // #H:mm[:ss]# (24h Time)\n        begin: regex.concat(/# */, TIME_24H, / *#/) },\n      {\n        // #h[:mm[:ss]] A# (12h Time)\n        begin: regex.concat(/# */, TIME_12H, / *#/) },\n      {\n        // date plus time\n        begin: regex.concat(\n          /# */,\n          regex.either(YYYY_MM_DD, MM_DD_YYYY),\n          / +/,\n          regex.either(TIME_12H, TIME_24H),\n          / *#/\n        ) }\n    ]\n  };\n\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      {\n        // Float\n        begin: /\\b\\d[\\d_]*((\\.[\\d_]+(E[+-]?[\\d_]+)?)|(E[+-]?[\\d_]+))[RFD@!#]?/ },\n      {\n        // Integer (base 10)\n        begin: /\\b\\d[\\d_]*((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 16)\n        begin: /&H[\\dA-F_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 8)\n        begin: /&O[0-7_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 2)\n        begin: /&B[01_]+((U?[SIL])|[%&])?/ }\n    ]\n  };\n\n  const LABEL = {\n    className: 'label',\n    begin: /^\\w+:/\n  };\n\n  const DOC_COMMENT = hljs.COMMENT(/'''/, /$/, { contains: [\n    {\n      className: 'doctag',\n      begin: /<\\/?/,\n      end: />/\n    }\n  ] });\n\n  const COMMENT = hljs.COMMENT(null, /$/, { variants: [\n    { begin: /'/ },\n    {\n      // TODO: Use multi-class for leading spaces\n      begin: /([\\t ]|^)REM(?=\\s)/ }\n  ] });\n\n  const DIRECTIVES = {\n    className: 'meta',\n    // TODO: Use multi-class for indentation once available\n    begin: /[\\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'const disable else elseif enable end externalsource if region then' },\n    contains: [ COMMENT ]\n  };\n\n  return {\n    name: 'Visual Basic .NET',\n    aliases: [ 'vb' ],\n    case_insensitive: true,\n    classNameAliases: { label: 'symbol' },\n    keywords: {\n      keyword:\n        'addhandler alias aggregate ansi as async assembly auto binary by byref byval ' /* a-b */\n        + 'call case catch class compare const continue custom declare default delegate dim distinct do ' /* c-d */\n        + 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' /* e-f */\n        + 'get global goto group handles if implements imports in inherits interface into iterator ' /* g-i */\n        + 'join key let lib loop me mid module mustinherit mustoverride mybase myclass ' /* j-m */\n        + 'namespace narrowing new next notinheritable notoverridable ' /* n */\n        + 'of off on operator option optional order overloads overridable overrides ' /* o */\n        + 'paramarray partial preserve private property protected public ' /* p */\n        + 'raiseevent readonly redim removehandler resume return ' /* r */\n        + 'select set shadows shared skip static step stop structure strict sub synclock ' /* s */\n        + 'take text then throw to try unicode until using when where while widening with withevents writeonly yield' /* t-y */,\n      built_in:\n        // Operators https://docs.microsoft.com/dotnet/visual-basic/language-reference/operators\n        'addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor '\n        // Type Conversion Functions https://docs.microsoft.com/dotnet/visual-basic/language-reference/functions/type-conversion-functions\n        + 'cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort',\n      type:\n        // Data types https://docs.microsoft.com/dotnet/visual-basic/language-reference/data-types\n        'boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort',\n      literal: 'true false nothing'\n    },\n    illegal:\n      '//|\\\\{|\\\\}|endif|gosub|variant|wend|^\\\\$ ' /* reserved deprecated keywords */,\n    contains: [\n      CHARACTER,\n      STRING,\n      DATE,\n      NUMBER,\n      LABEL,\n      DOC_COMMENT,\n      COMMENT,\n      DIRECTIVES\n    ]\n  };\n}\n\nexport { vbnet as default };\n", "/*\nLanguage: WebAssembly\nWebsite: https://webassembly.org\nDescription:  Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\nCategory: web, common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction wasm(hljs) {\n  hljs.regex;\n  const BLOCK_COMMENT = hljs.COMMENT(/\\(;/, /;\\)/);\n  BLOCK_COMMENT.contains.push(\"self\");\n  const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);\n\n  const KWS = [\n    \"anyfunc\",\n    \"block\",\n    \"br\",\n    \"br_if\",\n    \"br_table\",\n    \"call\",\n    \"call_indirect\",\n    \"data\",\n    \"drop\",\n    \"elem\",\n    \"else\",\n    \"end\",\n    \"export\",\n    \"func\",\n    \"global.get\",\n    \"global.set\",\n    \"local.get\",\n    \"local.set\",\n    \"local.tee\",\n    \"get_global\",\n    \"get_local\",\n    \"global\",\n    \"if\",\n    \"import\",\n    \"local\",\n    \"loop\",\n    \"memory\",\n    \"memory.grow\",\n    \"memory.size\",\n    \"module\",\n    \"mut\",\n    \"nop\",\n    \"offset\",\n    \"param\",\n    \"result\",\n    \"return\",\n    \"select\",\n    \"set_global\",\n    \"set_local\",\n    \"start\",\n    \"table\",\n    \"tee_local\",\n    \"then\",\n    \"type\",\n    \"unreachable\"\n  ];\n\n  const FUNCTION_REFERENCE = {\n    begin: [\n      /(?:func|call|call_indirect)/,\n      /\\s+/,\n      /\\$[^\\s)]+/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    }\n  };\n\n  const ARGUMENT = {\n    className: \"variable\",\n    begin: /\\$[\\w_]+/\n  };\n\n  const PARENS = {\n    match: /(\\((?!;)|\\))+/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n\n  const NUMBER = {\n    className: \"number\",\n    relevance: 0,\n    // borrowed from Prism, TODO: split out into variants\n    match: /[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/\n  };\n\n  const TYPE = {\n    // look-ahead prevents us from gobbling up opcodes\n    match: /(i32|i64|f32|f64)(?!\\.)/,\n    className: \"type\"\n  };\n\n  const MATH_OPERATIONS = {\n    className: \"keyword\",\n    // borrowed from Prism, TODO: split out into variants\n    match: /\\b(f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))\\b/\n  };\n\n  const OFFSET_ALIGN = {\n    match: [\n      /(?:offset|align)/,\n      /\\s*/,\n      /=/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"operator\"\n    }\n  };\n\n  return {\n    name: 'WebAssembly',\n    keywords: {\n      $pattern: /[\\w.]+/,\n      keyword: KWS\n    },\n    contains: [\n      LINE_COMMENT,\n      BLOCK_COMMENT,\n      OFFSET_ALIGN,\n      ARGUMENT,\n      PARENS,\n      FUNCTION_REFERENCE,\n      hljs.QUOTE_STRING_MODE,\n      TYPE,\n      MATH_OPERATIONS,\n      NUMBER\n    ]\n  };\n}\n\nexport { wasm as default };\n", "/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n  const regex = hljs.regex;\n  // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n  // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n  // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n  // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n  // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n  const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n  const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n  const XML_ENTITIES = {\n    className: 'symbol',\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n  };\n  const XML_META_KEYWORDS = {\n    begin: /\\s/,\n    contains: [\n      {\n        className: 'keyword',\n        begin: /#?[a-z_][a-z1-9_-]+/,\n        illegal: /\\n/\n      }\n    ]\n  };\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n    begin: /\\(/,\n    end: /\\)/\n  });\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n  const TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /=\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'string',\n            endsParent: true,\n            variants: [\n              {\n                begin: /\"/,\n                end: /\"/,\n                contains: [ XML_ENTITIES ]\n              },\n              {\n                begin: /'/,\n                end: /'/,\n                contains: [ XML_ENTITIES ]\n              },\n              { begin: /[^\\s\"'=<>`]+/ }\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: [\n      'html',\n      'xhtml',\n      'rss',\n      'atom',\n      'xjb',\n      'xsd',\n      'xsl',\n      'plist',\n      'wsf',\n      'svg'\n    ],\n    case_insensitive: true,\n    unicodeRegex: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: /<![a-z]/,\n        end: />/,\n        relevance: 10,\n        contains: [\n          XML_META_KEYWORDS,\n          QUOTE_META_STRING_MODE,\n          APOS_META_STRING_MODE,\n          XML_META_PAR_KEYWORDS,\n          {\n            begin: /\\[/,\n            end: /\\]/,\n            contains: [\n              {\n                className: 'meta',\n                begin: /<![a-z]/,\n                end: />/,\n                contains: [\n                  XML_META_KEYWORDS,\n                  XML_META_PAR_KEYWORDS,\n                  QUOTE_META_STRING_MODE,\n                  APOS_META_STRING_MODE\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      hljs.COMMENT(\n        /<!--/,\n        /-->/,\n        { relevance: 10 }\n      ),\n      {\n        begin: /<!\\[CDATA\\[/,\n        end: /\\]\\]>/,\n        relevance: 10\n      },\n      XML_ENTITIES,\n      // xml processing instructions\n      {\n        className: 'meta',\n        end: /\\?>/,\n        variants: [\n          {\n            begin: /<\\?xml/,\n            relevance: 10,\n            contains: [\n              QUOTE_META_STRING_MODE\n            ]\n          },\n          {\n            begin: /<\\?[a-z][a-z0-9]+/,\n          }\n        ]\n\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending bracket.\n        */\n        begin: /<style(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'style' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/style>/,\n          returnEnd: true,\n          subLanguage: [\n            'css',\n            'xml'\n          ]\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: /<script(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'script' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/script>/,\n          returnEnd: true,\n          subLanguage: [\n            'javascript',\n            'handlebars',\n            'xml'\n          ]\n        }\n      },\n      // we need this for now for jSX\n      {\n        className: 'tag',\n        begin: /<>|<\\/>/\n      },\n      // open tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /</,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE,\n            // <tag/>\n            // <tag>\n            // <tag ...\n            regex.either(/\\/>/, />/, /\\s/)\n          ))\n        ),\n        end: /\\/?>/,\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0,\n            starts: TAG_INTERNALS\n          }\n        ]\n      },\n      // close tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /<\\//,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE, />/\n          ))\n        ),\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0\n          },\n          {\n            begin: />/,\n            relevance: 0,\n            endsParent: true\n          }\n        ]\n      }\n    ]\n  };\n}\n\nexport { xml as default };\n", "/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n  const LITERALS = 'true false yes no null';\n\n  // YAML spec allows non-reserved URI characters in tags.\n  const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n  // Define keys as starting with a word character\n  // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n  // ...and ending with a colon followed immediately by a space, tab or newline.\n  // The YAML spec allows for much more than this, but this covers most use-cases.\n  const KEY = {\n    className: 'attr',\n    variants: [\n      { begin: '\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)' },\n      { // double quoted keys\n        begin: '\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)' },\n      { // single quoted keys\n        begin: '\\'\\\\w[\\\\w :\\\\/.-]*\\':(?=[ \\t]|$)' }\n    ]\n  };\n\n  const TEMPLATE_VARIABLES = {\n    className: 'template-variable',\n    variants: [\n      { // jinja templates Ansible\n        begin: /\\{\\{/,\n        end: /\\}\\}/\n      },\n      { // Ruby i18n\n        begin: /%\\{/,\n        end: /\\}/\n      }\n    ]\n  };\n  const STRING = {\n    className: 'string',\n    relevance: 0,\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      { begin: /\\S+/ }\n    ],\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      TEMPLATE_VARIABLES\n    ]\n  };\n\n  // Strings inside of value containers (objects) can't contain braces,\n  // brackets, or commas\n  const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n    {\n      begin: /'/,\n      end: /'/\n    },\n    {\n      begin: /\"/,\n      end: /\"/\n    },\n    { begin: /[^\\s,{}[\\]]+/ }\n  ] });\n\n  const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n  const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n  const FRACTION_RE = '(\\\\.[0-9]*)?';\n  const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n  const TIMESTAMP = {\n    className: 'number',\n    begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n  };\n\n  const VALUE_CONTAINER = {\n    end: ',',\n    endsWithParent: true,\n    excludeEnd: true,\n    keywords: LITERALS,\n    relevance: 0\n  };\n  const OBJECT = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n  const ARRAY = {\n    begin: '\\\\[',\n    end: '\\\\]',\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n\n  const MODES = [\n    KEY,\n    {\n      className: 'meta',\n      begin: '^---\\\\s*$',\n      relevance: 10\n    },\n    { // multi line string\n      // Blocks start with a | or > followed by a newline\n      //\n      // Indentation of subsequent lines must be the same to\n      // be considered part of the block\n      className: 'string',\n      begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n    },\n    { // Ruby/Rails erb\n      begin: '<%[%=-]?',\n      end: '[%-]?%>',\n      subLanguage: 'ruby',\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0\n    },\n    { // named tags\n      className: 'type',\n      begin: '!\\\\w+!' + URI_CHARACTERS\n    },\n    // https://yaml.org/spec/1.2/spec.html#id2784064\n    { // verbatim tags\n      className: 'type',\n      begin: '!<' + URI_CHARACTERS + \">\"\n    },\n    { // primary tags\n      className: 'type',\n      begin: '!' + URI_CHARACTERS\n    },\n    { // secondary tags\n      className: 'type',\n      begin: '!!' + URI_CHARACTERS\n    },\n    { // fragment id &ref\n      className: 'meta',\n      begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // fragment reference *ref\n      className: 'meta',\n      begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // array listing\n      className: 'bullet',\n      // TODO: remove |$ hack when we have proper look-ahead support\n      begin: '-(?=[ ]|$)',\n      relevance: 0\n    },\n    hljs.HASH_COMMENT_MODE,\n    {\n      beginKeywords: LITERALS,\n      keywords: { literal: LITERALS }\n    },\n    TIMESTAMP,\n    // numbers are any valid C-style number that\n    // sit isolated from other words\n    {\n      className: 'number',\n      begin: hljs.C_NUMBER_RE + '\\\\b',\n      relevance: 0\n    },\n    OBJECT,\n    ARRAY,\n    STRING\n  ];\n\n  const VALUE_MODES = [ ...MODES ];\n  VALUE_MODES.pop();\n  VALUE_MODES.push(CONTAINER_STRING);\n  VALUE_CONTAINER.contains = VALUE_MODES;\n\n  return {\n    name: 'YAML',\n    case_insensitive: true,\n    aliases: [ 'yml' ],\n    contains: MODES\n  };\n}\n\nexport { yaml as default };\n", "/**\n * @typedef {import('highlight.js').LanguageFn} LanguageFn\n */\n\nimport arduino from 'highlight.js/lib/languages/arduino'\nimport bash from 'highlight.js/lib/languages/bash'\nimport c from 'highlight.js/lib/languages/c'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport csharp from 'highlight.js/lib/languages/csharp'\nimport css from 'highlight.js/lib/languages/css'\nimport diff from 'highlight.js/lib/languages/diff'\nimport go from 'highlight.js/lib/languages/go'\nimport graphql from 'highlight.js/lib/languages/graphql'\nimport ini from 'highlight.js/lib/languages/ini'\nimport java from 'highlight.js/lib/languages/java'\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport json from 'highlight.js/lib/languages/json'\nimport kotlin from 'highlight.js/lib/languages/kotlin'\nimport less from 'highlight.js/lib/languages/less'\nimport lua from 'highlight.js/lib/languages/lua'\nimport makefile from 'highlight.js/lib/languages/makefile'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport objectivec from 'highlight.js/lib/languages/objectivec'\nimport perl from 'highlight.js/lib/languages/perl'\nimport php from 'highlight.js/lib/languages/php'\nimport phpTemplate from 'highlight.js/lib/languages/php-template'\nimport plaintext from 'highlight.js/lib/languages/plaintext'\nimport python from 'highlight.js/lib/languages/python'\nimport pythonRepl from 'highlight.js/lib/languages/python-repl'\nimport r from 'highlight.js/lib/languages/r'\nimport ruby from 'highlight.js/lib/languages/ruby'\nimport rust from 'highlight.js/lib/languages/rust'\nimport scss from 'highlight.js/lib/languages/scss'\nimport shell from 'highlight.js/lib/languages/shell'\nimport sql from 'highlight.js/lib/languages/sql'\nimport swift from 'highlight.js/lib/languages/swift'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport vbnet from 'highlight.js/lib/languages/vbnet'\nimport wasm from 'highlight.js/lib/languages/wasm'\nimport xml from 'highlight.js/lib/languages/xml'\nimport yaml from 'highlight.js/lib/languages/yaml'\n\n/**\n * Map of grammars.\n *\n * @type {Record<string, LanguageFn>}\n */\nexport const grammars = {\n  arduino,\n  bash,\n  c,\n  cpp,\n  csharp,\n  css,\n  diff,\n  go,\n  graphql,\n  ini,\n  java,\n  javascript,\n  json,\n  kotlin,\n  less,\n  lua,\n  makefile,\n  markdown,\n  objectivec,\n  perl,\n  php,\n  'php-template': phpTemplate,\n  plaintext,\n  python,\n  'python-repl': pythonRepl,\n  r,\n  ruby,\n  rust,\n  scss,\n  shell,\n  sql,\n  swift,\n  typescript,\n  vbnet,\n  wasm,\n  xml,\n  yaml\n}\n", "// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootData} RootData\n *\n * @typedef {import('highlight.js').Emitter} Emitter\n * @typedef {import('highlight.js').HLJSOptions} HljsOptions\n * @typedef {import('highlight.js').HighlightResult} HighlightResult\n * @typedef {import('highlight.js').LanguageFn} LanguageFn\n */\n\n/**\n * @typedef {Object} ExtraOptions\n *   Extra fields.\n * @property {ReadonlyArray<string> | null | undefined} [subset]\n *   List of allowed languages (default: all registered languages).\n *\n * @typedef {Object} Options\n *   Configuration for `highlight`.\n * @property {string | null | undefined} [prefix='hljs-']\n *   Class prefix (default: `'hljs-'`).\n *\n * @typedef {Options & ExtraOptions} AutoOptions\n *   Configuration for `highlightAuto`.\n */\n\nimport {ok as assert} from 'devlop'\nimport HighlightJs from 'highlight.js/lib/core'\n\n/** @type {AutoOptions} */\nconst emptyOptions = {}\n\nconst defaultPrefix = 'hljs-'\n\n/**\n * Create a `lowlight` instance.\n *\n * @param {Readonly<Record<string, LanguageFn>> | null | undefined} [grammars]\n *   Grammars to add (optional).\n * @returns\n *   Lowlight.\n */\nexport function createLowlight(grammars) {\n  const high = HighlightJs.newInstance()\n\n  if (grammars) {\n    register(grammars)\n  }\n\n  return {\n    highlight,\n    highlightAuto,\n    listLanguages,\n    register,\n    registerAlias,\n    registered\n  }\n\n  /**\n   * Highlight `value` (code) as `language` (name).\n   *\n   * @example\n   *   ```js\n   *   import {common, createLowlight} from 'lowlight'\n   *\n   *   const lowlight = createLowlight(common)\n   *\n   *   console.log(lowlight.highlight('css', 'em { color: red }'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'css', relevance: 3}}\n   *   ```\n   *\n   * @param {string} language\n   *   Programming language name.\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<Options> | null | undefined} [options={}]\n   *   Configuration (optional).\n   * @returns {Root}\n   *   Tree; with the following `data` fields: `language` (`string`), detected\n   *   programming language name; `relevance` (`number`), how sure lowlight is\n   *   that the given code is in the language.\n   */\n  function highlight(language, value, options) {\n    assert(typeof language === 'string', 'expected `string` as `name`')\n    assert(typeof value === 'string', 'expected `string` as `value`')\n    const settings = options || emptyOptions\n    const prefix =\n      typeof settings.prefix === 'string' ? settings.prefix : defaultPrefix\n\n    if (!high.getLanguage(language)) {\n      throw new Error('Unknown language: `' + language + '` is not registered')\n    }\n\n    // See: <https://github.com/highlightjs/highlight.js/issues/3621#issuecomment-1528841888>\n    high.configure({__emitter: HastEmitter, classPrefix: prefix})\n\n    const result = /** @type {HighlightResult & {_emitter: HastEmitter}} */ (\n      high.highlight(value, {ignoreIllegals: true, language})\n    )\n\n    // `highlight.js` seems to use this (currently) for broken grammars, so let\u2019s\n    // keep it in there just to be sure.\n    /* c8 ignore next 5 */\n    if (result.errorRaised) {\n      throw new Error('Could not highlight with `Highlight.js`', {\n        cause: result.errorRaised\n      })\n    }\n\n    const root = result._emitter.root\n\n    // Cast because it is always defined.\n    const data = /** @type {RootData} */ (root.data)\n\n    data.language = result.language\n    data.relevance = result.relevance\n\n    return root\n  }\n\n  /**\n   * Highlight `value` (code) and guess its programming language.\n   *\n   * @example\n   *   ```js\n   *   import {common, createLowlight} from 'lowlight'\n   *\n   *   const lowlight = createLowlight(common)\n   *\n   *   console.log(lowlight.highlightAuto('\"hello, \" + name + \"!\"'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'arduino', relevance: 2}}\n   *   ```\n   *\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<AutoOptions> | null | undefined} [options={}]\n   *   Configuration (optional).\n   * @returns {Root}\n   *   Tree; with the following `data` fields: `language` (`string`), detected\n   *   programming language name; `relevance` (`number`), how sure lowlight is\n   *   that the given code is in the language.\n   */\n  function highlightAuto(value, options) {\n    assert(typeof value === 'string', 'expected `string` as `value`')\n    const settings = options || emptyOptions\n    const subset = settings.subset || listLanguages()\n\n    let index = -1\n    let relevance = 0\n    /** @type {Root | undefined} */\n    let result\n\n    while (++index < subset.length) {\n      const name = subset[index]\n\n      if (!high.getLanguage(name)) continue\n\n      const current = highlight(name, value, options)\n\n      if (\n        current.data &&\n        current.data.relevance !== undefined &&\n        current.data.relevance > relevance\n      ) {\n        relevance = current.data.relevance\n        result = current\n      }\n    }\n\n    return (\n      result || {\n        type: 'root',\n        children: [],\n        data: {language: undefined, relevance}\n      }\n    )\n  }\n\n  /**\n   * List registered languages.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import markdown from 'highlight.js/lib/languages/markdown'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   console.log(lowlight.listLanguages()) // => []\n   *\n   *   lowlight.register({markdown})\n   *\n   *   console.log(lowlight.listLanguages()) // => ['markdown']\n   *   ```\n   *\n   * @returns {Array<string>}\n   *   Names of registered language.\n   */\n  function listLanguages() {\n    return high.listLanguages()\n  }\n\n  /**\n   * Register languages.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import xml from 'highlight.js/lib/languages/xml'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   lowlight.register({xml})\n   *\n   *   // Note: `html` is an alias for `xml`.\n   *   console.log(lowlight.highlight('html', '<em>Emphasis</em>'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'html', relevance: 2}}\n   *   ```\n   *\n   * @overload\n   * @param {Readonly<Record<string, LanguageFn>>} grammars\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {string} name\n   * @param {LanguageFn} grammar\n   * @returns {undefined}\n   *\n   * @param {Readonly<Record<string, LanguageFn>> | string} grammarsOrName\n   *   Grammars or programming language name.\n   * @param {LanguageFn | undefined} [grammar]\n   *   Grammar, if with name.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function register(grammarsOrName, grammar) {\n    if (typeof grammarsOrName === 'string') {\n      assert(grammar !== undefined, 'expected `grammar`')\n      high.registerLanguage(grammarsOrName, grammar)\n    } else {\n      /** @type {string} */\n      let name\n\n      for (name in grammarsOrName) {\n        if (Object.hasOwn(grammarsOrName, name)) {\n          high.registerLanguage(name, grammarsOrName[name])\n        }\n      }\n    }\n  }\n\n  /**\n   * Register aliases.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import markdown from 'highlight.js/lib/languages/markdown'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   lowlight.register({markdown})\n   *\n   *   // lowlight.highlight('mdown', '<em>Emphasis</em>')\n   *   // ^ would throw: Error: Unknown language: `mdown` is not registered\n   *\n   *   lowlight.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']})\n   *   lowlight.highlight('mdown', '<em>Emphasis</em>')\n   *   // ^ Works!\n   *   ```\n   *\n   * @overload\n   * @param {Readonly<Record<string, ReadonlyArray<string> | string>>} aliases\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {string} language\n   * @param {ReadonlyArray<string> | string} alias\n   * @returns {undefined}\n   *\n   * @param {Readonly<Record<string, ReadonlyArray<string> | string>> | string} aliasesOrName\n   *   Map of programming language names to one or more aliases, or programming\n   *   language name.\n   * @param {ReadonlyArray<string> | string | undefined} [alias]\n   *   One or more aliases for the programming language, if with `name`.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function registerAlias(aliasesOrName, alias) {\n    if (typeof aliasesOrName === 'string') {\n      assert(alias !== undefined)\n      high.registerAliases(\n        // Note: copy needed because hljs doesn\u2019t accept readonly arrays yet.\n        typeof alias === 'string' ? alias : [...alias],\n        {languageName: aliasesOrName}\n      )\n    } else {\n      /** @type {string} */\n      let key\n\n      for (key in aliasesOrName) {\n        if (Object.hasOwn(aliasesOrName, key)) {\n          const aliases = aliasesOrName[key]\n          high.registerAliases(\n            // Note: copy needed because hljs doesn\u2019t accept readonly arrays yet.\n            typeof aliases === 'string' ? aliases : [...aliases],\n            {languageName: key}\n          )\n        }\n      }\n    }\n  }\n\n  /**\n   * Check whether an alias or name is registered.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import javascript from 'highlight.js/lib/languages/javascript'\n   *\n   *   const lowlight = createLowlight({javascript})\n   *\n   *   console.log(lowlight.registered('funkyscript')) // => `false`\n   *\n   *   lowlight.registerAlias({javascript: 'funkyscript'})\n   *   console.log(lowlight.registered('funkyscript')) // => `true`\n   *   ```\n   *\n   * @param {string} aliasOrName\n   *   Name of a language or alias for one.\n   * @returns {boolean}\n   *   Whether `aliasOrName` is registered.\n   */\n  function registered(aliasOrName) {\n    return Boolean(high.getLanguage(aliasOrName))\n  }\n}\n\n/** @type {Emitter} */\nclass HastEmitter {\n  /**\n   * @param {Readonly<HljsOptions>} options\n   *   Configuration.\n   * @returns\n   *   Instance.\n   */\n  constructor(options) {\n    /** @type {HljsOptions} */\n    this.options = options\n    /** @type {Root} */\n    this.root = {\n      type: 'root',\n      children: [],\n      data: {language: undefined, relevance: 0}\n    }\n    /** @type {[Root, ...Array<Element>]} */\n    this.stack = [this.root]\n  }\n\n  /**\n   * @param {string} value\n   *   Text to add.\n   * @returns {undefined}\n   *   Nothing.\n   *\n   */\n  addText(value) {\n    if (value === '') return\n\n    const current = this.stack[this.stack.length - 1]\n    const tail = current.children[current.children.length - 1]\n\n    if (tail && tail.type === 'text') {\n      tail.value += value\n    } else {\n      current.children.push({type: 'text', value})\n    }\n  }\n\n  /**\n   *\n   * @param {unknown} rawName\n   *   Name to add.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  startScope(rawName) {\n    this.openNode(String(rawName))\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  endScope() {\n    this.closeNode()\n  }\n\n  /**\n   * @param {HastEmitter} other\n   *   Other emitter.\n   * @param {string} name\n   *   Name of the sublanguage.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  __addSublanguage(other, name) {\n    const current = this.stack[this.stack.length - 1]\n    // Assume only element content.\n    const results = /** @type {Array<ElementContent>} */ (other.root.children)\n\n    if (name) {\n      current.children.push({\n        type: 'element',\n        tagName: 'span',\n        properties: {className: [name]},\n        children: results\n      })\n    } else {\n      current.children.push(...results)\n    }\n  }\n\n  /**\n   * @param {string} name\n   *   Name to add.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  openNode(name) {\n    const self = this\n    // First \u201Cclass\u201D gets the prefix. Rest gets a repeated underscore suffix.\n    // See: <https://github.com/highlightjs/highlight.js/commit/51806aa>\n    // See: <https://github.com/wooorm/lowlight/issues/43>\n    const className = name.split('.').map(function (d, i) {\n      return i ? d + '_'.repeat(i) : self.options.classPrefix + d\n    })\n    const current = this.stack[this.stack.length - 1]\n    /** @type {Element} */\n    const child = {\n      type: 'element',\n      tagName: 'span',\n      properties: {className},\n      children: []\n    }\n\n    current.children.push(child)\n    this.stack.push(child)\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  closeNode() {\n    this.stack.pop()\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  finalize() {}\n\n  /**\n   * @returns {string}\n   *   Nothing.\n   */\n  toHTML() {\n    return ''\n  }\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : 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\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.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, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\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\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif ('GITHUB_ACTIONS' in env || 'GITEA_ACTIONS' in env) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].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 (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.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\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\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\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n", "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n", "import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` \u2192 `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst khulnasoft = createKhulnasoft(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: khulnasoft});\n\t\t\treturn khulnasoft;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst khulnasoft = createKhulnasoft(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: khulnasoft});\n\t\treturn khulnasoft;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createKhulnasoft(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createKhulnasoft(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createKhulnasoft = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst khulnasoft = (...arguments_) => applyStyle(khulnasoft, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(khulnasoft, proto);\n\n\tkhulnasoft[GENERATOR] = self;\n\tkhulnasoft[STYLER] = _styler;\n\tkhulnasoft[IS_EMPTY] = _isEmpty;\n\n\treturn khulnasoft;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootData} RootData\n * @typedef {import('hast').Text} Text\n *\n * @typedef {import('lowlight').AutoOptions} LowlightAutoOptions\n * @typedef {import('lowlight').LanguageFn} LanguageFn\n */\n\n/**\n * @typedef AutoFieldsExtra\n *   Extra fields.\n * @property {Sheet | null | undefined} [sheet]\n *   Sheet (optional).\n *\n * @typedef {Pick<LowlightAutoOptions, 'subset'>} AutoFieldsPicked\n *   Picked fields.\n *\n * @typedef {AutoFieldsExtra & AutoFieldsPicked} AutoOptions\n *   Configuration for `highlightAuto`.\n *\n * @typedef Result\n *   Result.\n * @property {string | undefined} language\n *   Detected programming language.\n * @property {number | undefined} relevance\n *   How sure `lowlight` is that the given code is in the language.\n * @property {string} value\n *   Highlighted code.\n *\n * @typedef {Record<string, Style>} Sheet\n *   Map `highlight.js` classes to styles functions.\n *\n *   The `hljs-` prefix must not be used in those classes.\n *   The \u201Cdescendant selector\u201D (a space) is supported.\n *\n *   For convenience [chalk\u2019s chaining of styles][styles] is suggested.\n *   An abbreviated example is as follows:\n *\n *   ```js\n *   {\n *     'comment': chalk.gray,\n *     'meta meta-string': chalk.cyan,\n *     'meta keyword': chalk.magenta,\n *     'emphasis': chalk.italic,\n *     'strong': chalk.bold,\n *     'formula': chalk.inverse\n *   }\n *   ```\n *\n * @callback Style\n *   Color something.\n * @param {string} value\n *   Input.\n * @returns {string}\n *   Output.\n */\n\nimport {Chalk} from 'chalk'\nimport {createLowlight} from 'lowlight'\n\nconst chalk = new Chalk({level: 2})\n\n/**\n * Default style sheet.\n *\n * @type {Readonly<Sheet>}\n */\nconst defaultSheet = {\n  comment: chalk.gray,\n  quote: chalk.gray,\n\n  keyword: chalk.green,\n  'selector-tag': chalk.green,\n  addition: chalk.green,\n\n  number: chalk.cyan,\n  string: chalk.cyan,\n  'meta meta-string': chalk.cyan,\n  literal: chalk.cyan,\n  doctag: chalk.cyan,\n  regexp: chalk.cyan,\n\n  title: chalk.blue,\n  section: chalk.blue,\n  name: chalk.blue,\n  'selector-id': chalk.blue,\n  'selector-class': chalk.blue,\n\n  attribute: chalk.yellow,\n  attr: chalk.yellow,\n  variable: chalk.yellow,\n  'template-variable': chalk.yellow,\n  'class title': chalk.yellow,\n  type: chalk.yellow,\n\n  symbol: chalk.magenta,\n  bullet: chalk.magenta,\n  subst: chalk.magenta,\n  meta: chalk.magenta,\n  'meta keyword': chalk.magenta,\n  'selector-attr': chalk.magenta,\n  'selector-pseudo': chalk.magenta,\n  link: chalk.magenta,\n\n  /* eslint-disable camelcase */\n  built_in: chalk.red,\n  /* eslint-enable camelcase */\n  deletion: chalk.red,\n\n  emphasis: chalk.italic,\n  strong: chalk.bold,\n  formula: chalk.inverse\n}\n\n/**\n * Create an `emphasize` instance.\n *\n * @param {Readonly<Record<string, LanguageFn>> | null | undefined} [grammars]\n *   Grammars to add (optional).\n * @returns\n *   Emphasize.\n */\nexport function createEmphasize(grammars) {\n  const lowlight = createLowlight(grammars)\n\n  return {\n    highlight,\n    highlightAuto,\n    listLanguages: lowlight.listLanguages,\n    register: lowlight.register,\n    registerAlias: lowlight.registerAlias,\n    registered: lowlight.registered\n  }\n\n  /**\n   * Highlight `value` (code) as `language` (name).\n   *\n   * @param {string} language\n   *   Programming language name.\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<Sheet> | null | undefined} [sheet]\n   *   Style sheet (optional).\n   * @returns {Result}\n   *   Result.\n   */\n  function highlight(language, value, sheet) {\n    const result = lowlight.highlight(language, value)\n    const data = /** @type {RootData} */ (result.data)\n\n    return {\n      language: data.language,\n      relevance: data.relevance,\n      value: visit(sheet || defaultSheet, result)\n    }\n  }\n\n  /**\n   * Highlight `value` (code) and guess its programming language.\n   *\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<AutoOptions> | Readonly<Sheet> | null | undefined} [options]\n   *   Configuration or style sheet (optional).\n   * @returns {Result}\n   *   Result.\n   */\n  function highlightAuto(value, options) {\n    /** @type {Readonly<Sheet> | null | undefined} */\n    let sheet\n    /** @type {Readonly<LowlightAutoOptions> | undefined} */\n    let config\n\n    if (options && ('subset' in options || 'sheet' in options)) {\n      const settings = /** @type {Readonly<AutoOptions>} */ (options)\n      config = {subset: settings.subset}\n      sheet = settings.sheet\n    } else {\n      sheet = /** @type {Readonly<Sheet> | null | undefined} */ (options)\n    }\n\n    const result = lowlight.highlightAuto(value, config)\n    const data = /** @type {RootData} */ (result.data)\n    return {\n      language: data.language,\n      relevance: data.relevance,\n      value: visit(sheet || defaultSheet, result)\n    }\n  }\n}\n\n/**\n * Visit one `node`.\n *\n * @param {Readonly<Sheet>} sheet\n *   Sheet.\n * @param {Readonly<Element> | Readonly<Root> | Readonly<Text>} node\n *   Node.\n * @returns {string}\n *   Result.\n */\nfunction visit(sheet, node) {\n  const names = new Set(\n    node.type === 'element' && Array.isArray(node.properties.className)\n      ? node.properties.className.map(function (d) {\n          return String(d).replace(/^hljs-/, '')\n        })\n      : []\n  )\n  /** @type {Sheet} */\n  const scoped = {}\n  /** @type {Style | undefined} */\n  let style\n  /** @type {string} */\n  let content = ''\n  /** @type {string} */\n  let key\n\n  for (key in sheet) {\n    if (Object.hasOwn(sheet, key)) {\n      const parts = key.split(' ')\n      const color = sheet[key]\n\n      if (names.has(parts[0])) {\n        if (parts.length === 1) {\n          style = color\n        } else {\n          scoped[parts.slice(1).join(' ')] = color\n        }\n      } else {\n        scoped[key] = color\n      }\n    }\n  }\n\n  if ('value' in node) {\n    content = node.value\n  } else if ('children' in node) {\n    content = all(\n      scoped,\n      /** @type {ReadonlyArray<Element | Text>} */ (node.children)\n    )\n  }\n\n  if (style) {\n    content = style(content)\n  }\n\n  return content\n}\n\n/**\n * Visit children in `node`.\n *\n * @param {Readonly<Sheet>} sheet\n *   Sheet.\n * @param {ReadonlyArray<Element | Text>} nodes\n *   Nodes.\n * @returns {string}\n *   Result.\n */\nfunction all(sheet, nodes) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < nodes.length) {\n    result.push(visit(sheet, nodes[index]))\n  }\n\n  return result.join('')\n}\n", "import { intro, log, outro } from \"@clack/prompts\";\nimport { bold, bgCyan, bgGreen, white, dim, yellow, cyan } from \"picocolors\";\n\nimport { track } from \"./track\";\n\nexport function printHelp(subcommand?: string) {\n  track(\"cli help\", { subcommand });\n\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" khulnasoft.com figma \"))) + `  ` + dim(VERSION));\n\n  switch (subcommand) {\n    case \"add\":\n    case \"generate\":\n    case \"gen\":\n    case \"g\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Generate Figma Components\")}\n\n${bgGreen(white(\" npx khulnasoft.com figma generate URL [URL ...] \"))}\n\nStart the auto-mapping wizard for the Figma Component URLs pasted in.\n\n${yellow(\"Usage:\")}\n  Get the URL by right-clicking on the Figma Component and selecting\n  \"Copy Link\". Be sure to copy the URL from the main component.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--figmaToken\")}     Figma access token for authentication\n  ${cyan(\"--privateKey\")}     Khulnasoft.com private API key\n  ${cyan(\"--spaceId\")}        Khulnasoft.com space ID to use\n  ${cyan(\"--ci\")}             Run in CI mode without interactive prompts\n  ${cyan(\"--force\")}          Force operation even if there are warnings\n  ${cyan(\"--skipInstallation\")} Skip the package installation step\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`\n      );\n      break;\n    case \"auth\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Authentication\")}\n\n${bgGreen(white(\" npx khulnasoft.com figma auth \"))}\n\nRe-authenticate with Figma and Khulnasoft.com.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--figmaToken\")}     Figma access token for authentication\n  ${cyan(\"--privateKey\")}     Khulnasoft.com private API key\n  ${cyan(\"--spaceId\")}        Khulnasoft.com space ID to use\n  ${cyan(\n    \"--force\"\n  )}          Force re-authentication even if already authenticated`\n      );\n      break;\n\n    case \"publish\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Publish Mappings\")}\n\n${bgGreen(white(\" npx khulnasoft.com figma publish \"))}\n\nPublish your Figma Mappings to Khulnasoft.com.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--privateKey\")}     Khulnasoft.com private API key\n  ${cyan(\"--spaceId\")}        Khulnasoft.com space ID to use\n  ${cyan(\"--ci\")}             Run in CI mode without interactive prompts\n  ${cyan(\"--force\")}          Force publish even if there are warnings\n  ${cyan(\"--printJson\")}      Print output as JSON\n  ${cyan(\"--dryrun\")}         Run without making changes\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`\n      );\n      break;\n\n    case \"migrate\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Migrate Mappings\")}\n\n${bgGreen(white(\" npx khulnasoft.com figma migrate \"))}\n\nMigrate your existing Figma Mappings into the repo as local files.\n\n${yellow(\"Description:\")}\n  Downloads existing Figma Mappings from Khulnasoft.com and saves them locally.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--privateKey\")}     Khulnasoft.com private API key\n  ${cyan(\"--spaceId\")}        Khulnasoft.com space ID to use\n  ${cyan(\"--force\")}          Force migration even if there are warnings\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`\n      );\n      break;\n\n    case \"code\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Code Generation\")}\n\n${bgGreen(white(\" npx khulnasoft.com code --url URL \"))}\n\nGenerate or modify code based on Figma designs.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--url\")}            URL to start completion from\n  ${cyan(\"--privateKey\")}     Khulnasoft.com private API key\n  ${cyan(\"--spaceId\")}        Khulnasoft.com space ID to use\n  ${cyan(\"--prompt\")}         Prompt text for non-interactive mode\n  ${cyan(\n    \"--mode\"\n  )}           Generation mode - either 'exact' for precise matches or 'creative' for more flexibility\n  ${cyan(\"--cwd\")}            Working directory to run commands from\n\n${yellow(\"Configuration Files:\")}\n  ${cyan(\n    \".khulnasoftignore\"\n  )}   Add patterns to exclude files from being included in code generation\n  ${cyan(\n    \".khulnasoftrules\"\n  )}    Add custom instructions that will be injected into the LLM prompt\n  ${cyan(\n    \".cursorrules\"\n  )}     Cursor's settings are automatically supported for consistent behavior`\n      );\n      break;\n\n    case \"indexing\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Code Indexing\")}\n\n${bgGreen(white(\" npx khulnasoft.com code indexing \"))}\n\nIndex your codebase to improve code generation results.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--privateKey\")}     Khulnasoft.com private API key\n  ${cyan(\"--spaceId\")}        Khulnasoft.com space ID to use\n  ${cyan(\"--cwd\")}            Working directory to run commands from`\n      );\n      break;\n\n    default:\n      log.info(`${bold(\"Available Commands:\")}\\n`);\n\n      const commands = [\n        {\n          command: \"generate URL [URL ...]\",\n          description: \"Start the auto-mapping wizard for Figma Component URLs\",\n        },\n        {\n          command: \"publish\",\n          description: \"Publish your Figma Mappings to Khulnasoft.com\",\n        },\n        {\n          command: \"migrate\",\n          description:\n            \"Migrate existing Figma Mappings into the repo as local files\",\n        },\n        {\n          command: \"auth\",\n          description: \"Re-authenticate with Figma and Khulnasoft.com\",\n        },\n        {\n          command: \"code\",\n          description: \"Generate or modify code based on Figma designs\",\n        },\n        {\n          command: \"indexing\",\n          description: \"Index your codebase to improve code generation results\",\n        },\n      ];\n\n      commands.forEach(({ command, description }) => {\n        log.info(\n          `${cyan(\"\u2192\")} ${bgGreen(white(` npx khulnasoft.com figma ${command} `))}\n   ${dim(description)}\\n`\n        );\n      });\n\n      log.info(\n        `\\nUse ${cyan(\n          \"npx khulnasoft.com figma help <command>\"\n        )} for detailed help about a command`\n      );\n  }\n\n  outro(\"bye \uD83D\uDC4B\");\n}\n\ndeclare const VERSION: string;\n", "import * as Amplitude from \"@amplitude/analytics-node\";\nimport * as Sentry from \"@sentry/node\";\nimport { version } from \"../package.json\";\nimport {\n  configHasProperty,\n  readConfigFile,\n  writeConfigFile,\n} from \"../node/node-sys\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport os from \"os\";\n\nexport async function initTracking() {\n  // ID used to group Amplitude events together\n  // always a chance of collision but unlikely and not the end of the world\n  // if we went duplicate events to the same session\n  const trackingEnabled =\n    SENTRY_ENABLED === \"true\" && process.env.NODE_ENV !== \"test\";\n  let deviceId = await getDeviceId();\n  let userId = await getUserId();\n\n  Amplitude.init(trackingEnabled ? \"2532be1b0436a18cb938b21fc7fa9faf\" : \"\", {\n    logLevel: Amplitude.Types.LogLevel.None,\n    flushIntervalMillis: 500,\n  });\n\n  const identifyObj = new Amplitude.Identify();\n  await Amplitude.identify(identifyObj, {\n    device_id: deviceId,\n    user_id: userId,\n    platform: os.type(),\n    os_name: process.platform,\n    os_version: os.release(),\n  }).promise;\n\n  Sentry.init({\n    dsn: \"https://3252dddc08dbb5bf406dc33bf3c13633@o117565.ingest.us.sentry.io/4505630794448896\",\n    tracesSampleRate: 1.0,\n    release: version,\n    environment: process.env.NODE_ENV,\n    enabled: trackingEnabled,\n    integrations: [\n      new Sentry.Integrations.Http({ tracing: true }),\n      ...Sentry.autoDiscoverNodePerformanceMonitoringIntegrations(),\n    ],\n  });\n\n  Sentry.setUser({\n    username: process.env.USER || process.env.USERNAME || \"unknown\",\n  });\n}\n\nexport async function track(\n  eventName: string,\n  options: Record<string, any>,\n  eventOptions?: Amplitude.Types.EventOptions\n) {\n  let props: Record<string, any> = {\n    ...options,\n    app: \"dev-tools-cli\",\n    package: \"cli\",\n  };\n\n  return Amplitude.track(eventName, props, {\n    ...eventOptions,\n    user_id: await getUserId(),\n    device_id: await getDeviceId(),\n  });\n}\n\nlet userId: string | undefined = undefined;\nlet deviceId: string | undefined = undefined;\n\nexport async function setUserId(id: string) {\n  userId = id;\n  const devToolsConfig = await readConfigFile();\n  await writeConfigFile({ ...devToolsConfig, userId: id });\n}\n\nasync function getUserId(): Promise<string> {\n  if (userId) {\n    return userId!;\n  }\n  const devToolsConfig = await readConfigFile();\n  let uniqueTrackingId;\n  if (configHasProperty(devToolsConfig, \"userId\")) {\n    uniqueTrackingId = devToolsConfig.userId;\n  }\n  userId = uniqueTrackingId;\n  return uniqueTrackingId;\n}\n\nasync function getDeviceId(): Promise<string> {\n  if (deviceId) {\n    return deviceId!;\n  }\n  const devToolsConfig = await readConfigFile();\n  let uniqueTrackingId = uuidv4();\n  if (configHasProperty(devToolsConfig, \"deviceId\")) {\n    uniqueTrackingId = devToolsConfig.deviceId;\n  } else {\n    await writeConfigFile({ ...devToolsConfig, deviceId: uniqueTrackingId });\n  }\n  deviceId = uniqueTrackingId;\n  return uniqueTrackingId;\n}\n\ndeclare const SENTRY_ENABLED: string;\n", "{\n  \"name\": \"@khulnasoft.com/dev-tools\",\n  \"version\": \"1.3.3\",\n  \"description\": \"KhulnaSoft - CMS Dev tools\",\n  \"type\": \"module\",\n  \"main\": \"./core/index.cjs\",\n  \"module\": \"./core/index.mjs\",\n  \"types\": \"./core/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./core/index.d.ts\",\n      \"import\": \"./core/index.mjs\",\n      \"require\": \"./core/index.cjs\"\n    },\n    \"./core\": {\n      \"types\": \"./core/index.d.ts\",\n      \"import\": \"./core/index.mjs\",\n      \"require\": \"./core/index.cjs\"\n    },\n    \"./figma\": {\n      \"types\": \"./figma/index.d.ts\",\n      \"import\": \"./figma/index.mjs\",\n      \"require\": \"./figma/index.cjs\"\n    },\n    \"./figma/jsx-runtime\": {\n      \"types\": \"./figma/jsx-runtime/index.d.ts\",\n      \"import\": \"./figma/jsx-runtime/index.mjs\",\n      \"require\": \"./figma/jsx-runtime/index.cjs\"\n    },\n    \"./next\": {\n      \"types\": \"./next/index.d.ts\",\n      \"import\": \"./next/index.mjs\",\n      \"require\": \"./next/index.cjs\"\n    },\n    \"./node\": {\n      \"types\": \"./node/index.d.ts\",\n      \"import\": \"./node/index.mjs\",\n      \"require\": \"./node/index.cjs\"\n    },\n    \"./remix\": {\n      \"types\": \"./remix/index.d.ts\",\n      \"import\": \"./remix/index.mjs\",\n      \"require\": \"./remix/index.cjs\"\n    },\n    \"./remix/server-build\": {\n      \"types\": \"./remix/server-build/index.d.ts\",\n      \"import\": \"./remix/server-build/index.mjs\",\n      \"require\": \"./remix/server-build/index.cjs\"\n    },\n    \"./server\": {\n      \"types\": \"./server/index.d.ts\",\n      \"import\": \"./server/index.mjs\",\n      \"require\": \"./server/index.cjs\"\n    },\n    \"./vite\": {\n      \"types\": \"./vite/index.d.ts\",\n      \"import\": \"./vite/index.mjs\",\n      \"require\": \"./vite/index.cjs\"\n    },\n    \"./webpack\": {\n      \"types\": \"./webpack/index.d.ts\",\n      \"import\": \"./webpack/index.mjs\",\n      \"require\": \"./webpack/index.cjs\"\n    },\n    \"./angular\": {\n      \"types\": \"./angular/index.d.ts\",\n      \"import\": \"./angular/index.mjs\",\n      \"require\": \"./angular/index.cjs\"\n    }\n  },\n  \"bin\": {\n    \"khulnasoft-dev-tools\": \"cli/main.cjs\",\n    \"khulnasoft.com\": \"cli/main.cjs\",\n    \"khulnasoft\": \"cli/main.cjs\"\n  },\n  \"files\": [\n    \"core\",\n    \"cli\",\n    \"next\",\n    \"node\",\n    \"remix\",\n    \"server\",\n    \"types\",\n    \"vite\",\n    \"webpack\",\n    \"angular\",\n    \"figma\"\n  ],\n  \"dependencies\": {\n    \"chokidar\": \"^4.0.1\",\n    \"glob\": \"10.4\",\n    \"ignore\": \"^6.0.2\",\n    \"launch-editor\": \"^2.6.0\",\n    \"open\": \"^10.1.0\",\n    \"prettier\": \"^2.8.8\",\n    \"typescript\": \"^5.1.6\",\n    \"undici\": \"^5.14.0\"\n  },\n  \"homepage\": \"https://khulnasoft.com/\",\n  \"keywords\": [\n    \"khulnasoft.com\",\n    \"khulnasoft\",\n    \"dev-tools\",\n    \"devtools\",\n    \"visual editor\",\n    \"visual cms\",\n    \"cms\",\n    \"drag and drop\",\n    \"react\",\n    \"remix\",\n    \"next\",\n    \"qwik\",\n    \"vcp\",\n    \"visual copilot\",\n    \"figma to code\",\n    \"design to code\",\n    \"figma to react\",\n    \"figma\"\n  ],\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"license\": \"MIT\",\n  \"private\": true\n}\n", "import type { DevToolsSys, FileChangeCallback, FileChangeInfo } from \"../types\";\nimport {\n  access,\n  mkdir,\n  readdir,\n  readFile,\n  stat,\n  unlink,\n  writeFile,\n} from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport {\n  existsSync,\n  readdirSync,\n  readFileSync,\n  statSync,\n  unlinkSync,\n} from \"node:fs\";\nimport { homedir, hostname } from \"node:os\";\nimport path from \"node:path\";\nimport type { Options as PrettierOptions } from \"prettier\";\nimport prettier from \"prettier\";\nimport ts from \"typescript\";\nimport launchEditor from \"launch-editor\";\nimport { detectFrameworks } from \"../core/detect-frameworks\";\nimport { spawnSync } from \"node:child_process\";\nimport * as magicast from \"magicast\";\n\ninterface DevToolsNodeSysOptions {\n  cwd: string;\n  skipValidate?: boolean;\n  ignoreMissingConfig?: boolean;\n}\n\nasync function readdirRecursive(\n  dir: string,\n  skipFolders: Set<string>\n): Promise<string[]> {\n  const entries = await readdir(dir, { withFileTypes: true });\n  const files: string[] = [];\n\n  for (const entry of entries) {\n    const fullPath = path.join(dir, entry.name);\n\n    if (entry.isDirectory()) {\n      if (!skipFolders.has(entry.name)) {\n        const subFiles = await readdirRecursive(fullPath, skipFolders);\n        files.push(...subFiles);\n      }\n    } else {\n      files.push(fullPath);\n    }\n  }\n\n  return files;\n}\n\nexport async function createDevToolsNodeSys(\n  opts: DevToolsNodeSysOptions\n): Promise<DevToolsSys> {\n  const onChangeCallbacks = new Set<FileChangeCallback>();\n\n  const debug = (...args: any[]) => {\n    if (process.env.DEBUG) {\n      const d = new Date();\n      const ts = `${String(d.getMinutes()).padStart(2, \"0\")}:${String(\n        d.getSeconds()\n      ).padStart(2, \"0\")}.${String(d.getMilliseconds()).padStart(3, \"0\")}`;\n      // eslint-disable-next-line no-console\n      console.debug(ts, `[khulnasoft-dev-tools]`, ...args);\n    }\n  };\n\n  const hash = async (str: string) => {\n    const hash = createHash(\"md5\");\n    hash.update(str);\n    return hash.digest(\"hex\");\n  };\n  const rootDir = path.normalize(opts.cwd);\n  const repoRootDir = findPackageJsonDir(path.normalize(opts.cwd)) ?? rootDir;\n  const appRootDir = findAppRootDir(path.normalize(opts.cwd)) ?? repoRootDir;\n\n  const nodeFs: DevToolsSys = {\n    ...path,\n    getCwdDir: () => rootDir,\n    getRepoRootDir: () => repoRootDir,\n    getAppRootDir: () => appRootDir,\n    cwd: () => process.cwd(),\n    exists: async (p) => {\n      try {\n        await access(p);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    },\n    magicast,\n    existsSync: (p) => {\n      // TODO: This is causing error for react vite, need to investigate\n      // validatePath(opts, p);\n      return existsSync(p);\n    },\n    readdir: async (p, absolutePaths) => {\n      const items = await readdir(p);\n      if (absolutePaths) {\n        return items.map((i) => path.join(p, i));\n      }\n      return items;\n    },\n    readdirRecursive: async (p, skipFolders) => {\n      return readdirRecursive(p, new Set(skipFolders));\n    },\n    readdirSync: (p) => {\n      return readdirSync(p);\n    },\n    readFile: async (p) => {\n      try {\n        const content = await readFile(p, \"utf-8\");\n        return content;\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    readFileSync(p) {\n      try {\n        return readFileSync(p, \"utf-8\");\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    spawnSync,\n    stat: async (p) => {\n      const s = await stat(p);\n      return s;\n    },\n    statSync: (p) => {\n      return statSync(p);\n    },\n    unlinkSync: (p) => {\n      unlinkSync(p);\n    },\n    unlink: async (p) => {\n      await unlink(p);\n    },\n    writeFile: async (p, contents) => {\n      p = path.normalize(p);\n      const fileInfo: FileChangeInfo = {\n        path: p,\n        basename: path.basename(p),\n        dirname: path.dirname(p),\n        extname: path.extname(p),\n      };\n\n      await mkdir(path.dirname(p), { recursive: true });\n      await writeFile(p, contents);\n\n      for (const onChangeCallback of onChangeCallbacks) {\n        await onChangeCallback(fileInfo);\n      }\n    },\n    hash,\n    getDeviceId: () => hash(`${hostname()}:${homedir()}`),\n    formatCode: async (filePath, code) => {\n      let userOpts: PrettierOptions | null = null;\n      try {\n        userOpts = await prettier.resolveConfig(filePath);\n      } catch (e) {\n        //\n      }\n\n      try {\n        return prettier.format(code, {\n          ...userOpts,\n          filepath: filePath,\n        });\n      } catch (e) {\n        // possible the prettier internal parser throws an error\n        // in that case, just return the original code\n      }\n      return code;\n    },\n    on: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.add(callback);\n      }\n    },\n    off: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.delete(callback);\n      }\n    },\n    debug,\n    launchEditor: async (file) => {\n      try {\n        let filePath = file.filePath;\n        if (typeof file.line === \"number\") {\n          filePath += `:${file.line}`;\n          if (typeof file.column === \"number\") {\n            filePath += `:${file.column}`;\n          }\n        }\n\n        launchEditor(filePath, \"code\", (p, e) => {\n          console.error(`Failed to launch editor for ${p}`);\n          if (e) {\n            console.error(e);\n          }\n        });\n      } catch (e: any) {\n        console.error(`Failed to launch editor for ${String(e.message || e)}`);\n      }\n    },\n    platform: () => {\n      return { runtime: \"node\", os: process.platform };\n    },\n    getRepoInfo: async () => {\n      const rootDir = path.normalize(opts.cwd);\n      return {\n        remoteUrl: getGitRemoteURL(rootDir),\n        defaultBranch: getGitRepoDefaultBranchName(rootDir),\n        commit: getGitCommit(rootDir),\n        currentBranch: getCurrentBranchName(rootDir),\n      };\n    },\n    getFrameworks: () => [],\n    ts,\n    version:\n      typeof DEV_TOOLS_VERSION === \"string\" ? DEV_TOOLS_VERSION : \"0.0.0\",\n    sdkVersion: null,\n    ignoreMissingConfig: opts.ignoreMissingConfig,\n    kind: null,\n  };\n\n  const frameworks = await detectFrameworks(nodeFs);\n  nodeFs.getFrameworks = () => frameworks;\n\n  return nodeFs;\n}\n\nfunction getConfigPath() {\n  const homeDirPath = homedir();\n  return path.join(homeDirPath, \".config\", \"khulnasoft\", \"dev-tools.json\");\n}\n\nexport function configHasProperty(contents: Record<string, any>, key: string) {\n  return typeof contents === \"object\" && contents != null && key in contents;\n}\n\nexport async function readConfigFile() {\n  const configPath = getConfigPath();\n  try {\n    const contents = await readFile(configPath, \"utf-8\");\n    if (typeof contents === \"string\") {\n      return JSON.parse(contents);\n    }\n  } catch (e: any) {\n    if (e.code === \"ENOENT\") {\n      return null;\n    }\n  }\n  return null;\n}\n\nexport async function writeConfigFile(contents: Record<string, any>) {\n  const configPath = getConfigPath();\n  contents = typeof contents === \"object\" && contents != null ? contents : {};\n\n  await mkdir(path.dirname(configPath), { recursive: true });\n  await writeFile(configPath, JSON.stringify(contents ?? {}, null, 2));\n}\n\ndeclare const DEV_TOOLS_VERSION: string;\n\nexport function getGitRemoteURL(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"config\", \"--get\", \"remote.origin.url\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    console.error(\"Error getting git remote URL:\", error);\n    return \"\";\n  }\n}\n\n/**\n * Find the default branch name (master or main) for the git repository\n */\nfunction getGitRepoDefaultBranchName(repoPath: string) {\n  const DEFAULT_BRANCH_NAME = \"master\";\n\n  try {\n    // Get all git branches\n    const gitBranchResult = spawnSync(\"git\", [\"branch\", \"-r\"], {\n      cwd: repoPath,\n    });\n\n    if (!gitBranchResult.stdout) {\n      return DEFAULT_BRANCH_NAME;\n    }\n\n    const branches = gitBranchResult.stdout\n      .toString()\n      .trim()\n      .split(\"\\n\")\n      .map((s) => s.trim());\n\n    // Check if origin/main exists, otherwise assume master\n    if (branches.includes(\"origin/main\")) {\n      return \"main\";\n    } else {\n      return DEFAULT_BRANCH_NAME;\n    }\n  } catch (error: any) {\n    console.error(\n      \"Error getting git default branch name:\",\n      error.toString().split(\"\\n\")[0]\n    );\n    return DEFAULT_BRANCH_NAME;\n  }\n}\n\nfunction getGitCommit(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"rev-parse\", \"HEAD\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    console.error(\"Error getting git commit:\", error);\n    return \"\";\n  }\n}\n\nfunction getCurrentBranchName(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"branch\", \"--show-current\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    console.error(\"Error getting current branch name:\", error);\n    return \"\";\n  }\n}\n\nfunction findPackageJsonDir(dir: string) {\n  const fsRoot = path.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    const pkgJsonPath = path.join(dir, \"package.json\");\n    const content = existsSync(pkgJsonPath);\n    if (content) {\n      return dir;\n    }\n\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = path.dirname(dir);\n  }\n\n  return null;\n}\n\nfunction findAppRootDir(dir: string) {\n  const fsRoot = path.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    // Package root\n    if (existsSync(path.join(dir, \"package.json\"))) {\n      return dir;\n    }\n    // Remix root .js\n    if (existsSync(path.join(dir, \"remix.config.js\"))) {\n      return dir;\n    }\n    // Remix root .js\n    if (existsSync(path.join(dir, \"remix.config.mjs\"))) {\n      return dir;\n    }\n    // Remix root .ts\n    if (existsSync(path.join(dir, \"remix.config.ts\"))) {\n      return dir;\n    }\n    // Vite root .js\n    if (existsSync(path.join(dir, \"vite.config.js\"))) {\n      return dir;\n    }\n    // Vite root .ts\n    if (existsSync(path.join(dir, \"vite.config.ts\"))) {\n      return dir;\n    }\n    // Vite root .mjs\n    if (existsSync(path.join(dir, \"vite.config.mjs\"))) {\n      return dir;\n    }\n    // Next root .js\n    if (existsSync(path.join(dir, \"next.config.js\"))) {\n      return dir;\n    }\n    // Next root .ts\n    if (existsSync(path.join(dir, \"next.config.ts\"))) {\n      return dir;\n    }\n    // Angular root\n    if (existsSync(path.join(dir, \"angular.json\"))) {\n      return dir;\n    }\n    // Monorepo root\n    if (existsSync(path.join(dir, \"project.json\"))) {\n      return dir;\n    }\n    // TsConfig root\n    if (existsSync(path.join(dir, \"tsconfig.json\"))) {\n      return dir;\n    }\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = path.dirname(dir);\n  }\n\n  return null;\n}\n", "import { promises } from 'node:fs';\nimport 'fs';\nimport sourceMap from 'source-map-js';\nimport * as babelParser from '@babel/parser';\n\nfunction sharedPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var builtin = types.builtInTypes;\n  var isNumber = builtin.number;\n  function geq(than) {\n    return Type.from(\n      (value) => isNumber.check(value) && value >= than,\n      isNumber + \" >= \" + than\n    );\n  }\n  const defaults = {\n    // Functions were used because (among other reasons) that's the most\n    // elegant way to allow for the emptyArray one always to give a new\n    // array instance.\n    \"null\": function() {\n      return null;\n    },\n    \"emptyArray\": function() {\n      return [];\n    },\n    \"false\": function() {\n      return false;\n    },\n    \"true\": function() {\n      return true;\n    },\n    \"undefined\": function() {\n    },\n    \"use strict\": function() {\n      return \"use strict\";\n    }\n  };\n  var naiveIsPrimitive = Type.or(\n    builtin.string,\n    builtin.number,\n    builtin.boolean,\n    builtin.null,\n    builtin.undefined\n  );\n  const isPrimitive = Type.from(\n    (value) => {\n      if (value === null)\n        return true;\n      var type = typeof value;\n      if (type === \"object\" || type === \"function\") {\n        return false;\n      }\n      return true;\n    },\n    naiveIsPrimitive.toString()\n  );\n  return {\n    geq,\n    defaults,\n    isPrimitive\n  };\n}\nfunction maybeSetModuleExports(moduleGetter) {\n  try {\n    var nodeModule = moduleGetter();\n    var originalExports = nodeModule.exports;\n    var defaultExport = originalExports[\"default\"];\n  } catch {\n    return;\n  }\n  if (defaultExport && defaultExport !== originalExports && typeof originalExports === \"object\") {\n    Object.assign(defaultExport, originalExports, { \"default\": defaultExport });\n    if (originalExports.__esModule) {\n      Object.defineProperty(defaultExport, \"__esModule\", { value: true });\n    }\n    nodeModule.exports = defaultExport;\n  }\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$2 = (obj, key, value) => {\n  __defNormalProp$2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nconst Op$1 = Object.prototype;\nconst objToStr = Op$1.toString;\nconst hasOwn$6 = Op$1.hasOwnProperty;\nclass BaseType {\n  assert(value, deep) {\n    if (!this.check(value, deep)) {\n      var str = shallowStringify(value);\n      throw new Error(str + \" does not match type \" + this);\n    }\n    return true;\n  }\n  arrayOf() {\n    const elemType = this;\n    return new ArrayType(elemType);\n  }\n}\nclass ArrayType extends BaseType {\n  constructor(elemType) {\n    super();\n    this.elemType = elemType;\n    __publicField$2(this, \"kind\", \"ArrayType\");\n  }\n  toString() {\n    return \"[\" + this.elemType + \"]\";\n  }\n  check(value, deep) {\n    return Array.isArray(value) && value.every((elem) => this.elemType.check(elem, deep));\n  }\n}\nclass IdentityType extends BaseType {\n  constructor(value) {\n    super();\n    this.value = value;\n    __publicField$2(this, \"kind\", \"IdentityType\");\n  }\n  toString() {\n    return String(this.value);\n  }\n  check(value, deep) {\n    const result = value === this.value;\n    if (!result && typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return result;\n  }\n}\nclass ObjectType extends BaseType {\n  constructor(fields) {\n    super();\n    this.fields = fields;\n    __publicField$2(this, \"kind\", \"ObjectType\");\n  }\n  toString() {\n    return \"{ \" + this.fields.join(\", \") + \" }\";\n  }\n  check(value, deep) {\n    return objToStr.call(value) === objToStr.call({}) && this.fields.every((field) => {\n      return field.type.check(value[field.name], deep);\n    });\n  }\n}\nclass OrType extends BaseType {\n  constructor(types) {\n    super();\n    this.types = types;\n    __publicField$2(this, \"kind\", \"OrType\");\n  }\n  toString() {\n    return this.types.join(\" | \");\n  }\n  check(value, deep) {\n    if (this.types.some((type) => type.check(value, !!deep))) {\n      return true;\n    }\n    if (typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return false;\n  }\n}\nclass PredicateType extends BaseType {\n  constructor(name, predicate) {\n    super();\n    this.name = name;\n    this.predicate = predicate;\n    __publicField$2(this, \"kind\", \"PredicateType\");\n  }\n  toString() {\n    return this.name;\n  }\n  check(value, deep) {\n    const result = this.predicate(value, deep);\n    if (!result && typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return result;\n  }\n}\nclass Def {\n  constructor(type, typeName) {\n    this.type = type;\n    this.typeName = typeName;\n    __publicField$2(this, \"baseNames\", []);\n    __publicField$2(this, \"ownFields\", /* @__PURE__ */ Object.create(null));\n    // Includes own typeName. Populated during finalization.\n    __publicField$2(this, \"allSupertypes\", /* @__PURE__ */ Object.create(null));\n    // Linear inheritance hierarchy. Populated during finalization.\n    __publicField$2(this, \"supertypeList\", []);\n    // Includes inherited fields.\n    __publicField$2(this, \"allFields\", /* @__PURE__ */ Object.create(null));\n    // Non-hidden keys of allFields.\n    __publicField$2(this, \"fieldNames\", []);\n    // This property will be overridden as true by individual Def instances\n    // when they are finalized.\n    __publicField$2(this, \"finalized\", false);\n    // False by default until .build(...) is called on an instance.\n    __publicField$2(this, \"buildable\", false);\n    __publicField$2(this, \"buildParams\", []);\n  }\n  isSupertypeOf(that) {\n    if (that instanceof Def) {\n      if (this.finalized !== true || that.finalized !== true) {\n        throw new Error(\"\");\n      }\n      return hasOwn$6.call(that.allSupertypes, this.typeName);\n    } else {\n      throw new Error(that + \" is not a Def\");\n    }\n  }\n  checkAllFields(value, deep) {\n    var allFields = this.allFields;\n    if (this.finalized !== true) {\n      throw new Error(\"\" + this.typeName);\n    }\n    function checkFieldByName(name) {\n      var field = allFields[name];\n      var type = field.type;\n      var child = field.getValue(value);\n      return type.check(child, deep);\n    }\n    return value !== null && typeof value === \"object\" && Object.keys(allFields).every(checkFieldByName);\n  }\n  bases(...supertypeNames) {\n    var bases = this.baseNames;\n    if (this.finalized) {\n      if (supertypeNames.length !== bases.length) {\n        throw new Error(\"\");\n      }\n      for (var i = 0; i < supertypeNames.length; i++) {\n        if (supertypeNames[i] !== bases[i]) {\n          throw new Error(\"\");\n        }\n      }\n      return this;\n    }\n    supertypeNames.forEach((baseName) => {\n      if (bases.indexOf(baseName) < 0) {\n        bases.push(baseName);\n      }\n    });\n    return this;\n  }\n}\nclass Field {\n  constructor(name, type, defaultFn, hidden) {\n    this.name = name;\n    this.type = type;\n    this.defaultFn = defaultFn;\n    __publicField$2(this, \"hidden\");\n    this.hidden = !!hidden;\n  }\n  toString() {\n    return JSON.stringify(this.name) + \": \" + this.type;\n  }\n  getValue(obj) {\n    var value = obj[this.name];\n    if (typeof value !== \"undefined\") {\n      return value;\n    }\n    if (typeof this.defaultFn === \"function\") {\n      value = this.defaultFn.call(obj);\n    }\n    return value;\n  }\n}\nfunction shallowStringify(value) {\n  if (Array.isArray(value)) {\n    return \"[\" + value.map(shallowStringify).join(\", \") + \"]\";\n  }\n  if (value && typeof value === \"object\") {\n    return \"{ \" + Object.keys(value).map(function(key) {\n      return key + \": \" + value[key];\n    }).join(\", \") + \" }\";\n  }\n  return JSON.stringify(value);\n}\nfunction typesPlugin(_fork) {\n  const Type = {\n    or(...types) {\n      return new OrType(types.map((type) => Type.from(type)));\n    },\n    from(value, name) {\n      if (value instanceof ArrayType || value instanceof IdentityType || value instanceof ObjectType || value instanceof OrType || value instanceof PredicateType) {\n        return value;\n      }\n      if (value instanceof Def) {\n        return value.type;\n      }\n      if (isArray.check(value)) {\n        if (value.length !== 1) {\n          throw new Error(\"only one element type is permitted for typed arrays\");\n        }\n        return new ArrayType(Type.from(value[0]));\n      }\n      if (isObject.check(value)) {\n        return new ObjectType(Object.keys(value).map((name2) => {\n          return new Field(name2, Type.from(value[name2], name2));\n        }));\n      }\n      if (typeof value === \"function\") {\n        var bicfIndex = builtInCtorFns.indexOf(value);\n        if (bicfIndex >= 0) {\n          return builtInCtorTypes[bicfIndex];\n        }\n        if (typeof name !== \"string\") {\n          throw new Error(\"missing name\");\n        }\n        return new PredicateType(name, value);\n      }\n      return new IdentityType(value);\n    },\n    // Define a type whose name is registered in a namespace (the defCache) so\n    // that future definitions will return the same type given the same name.\n    // In particular, this system allows for circular and forward definitions.\n    // The Def object d returned from Type.def may be used to configure the\n    // type d.type by calling methods such as d.bases, d.build, and d.field.\n    def(typeName) {\n      return hasOwn$6.call(defCache, typeName) ? defCache[typeName] : defCache[typeName] = new DefImpl(typeName);\n    },\n    hasDef(typeName) {\n      return hasOwn$6.call(defCache, typeName);\n    }\n  };\n  var builtInCtorFns = [];\n  var builtInCtorTypes = [];\n  function defBuiltInType(name, example) {\n    const objStr = objToStr.call(example);\n    const type = new PredicateType(\n      name,\n      (value) => objToStr.call(value) === objStr\n    );\n    if (example && typeof example.constructor === \"function\") {\n      builtInCtorFns.push(example.constructor);\n      builtInCtorTypes.push(type);\n    }\n    return type;\n  }\n  const isString = defBuiltInType(\"string\", \"truthy\");\n  const isFunction = defBuiltInType(\"function\", function() {\n  });\n  const isArray = defBuiltInType(\"array\", []);\n  const isObject = defBuiltInType(\"object\", {});\n  const isRegExp = defBuiltInType(\"RegExp\", /./);\n  const isDate = defBuiltInType(\"Date\", /* @__PURE__ */ new Date());\n  const isNumber = defBuiltInType(\"number\", 3);\n  const isBoolean = defBuiltInType(\"boolean\", true);\n  const isNull = defBuiltInType(\"null\", null);\n  const isUndefined = defBuiltInType(\"undefined\", void 0);\n  const isBigInt = typeof BigInt === \"function\" ? defBuiltInType(\"BigInt\", BigInt(1234)) : new PredicateType(\"BigInt\", () => false);\n  const builtInTypes = {\n    string: isString,\n    function: isFunction,\n    array: isArray,\n    object: isObject,\n    RegExp: isRegExp,\n    Date: isDate,\n    number: isNumber,\n    boolean: isBoolean,\n    null: isNull,\n    undefined: isUndefined,\n    BigInt: isBigInt\n  };\n  var defCache = /* @__PURE__ */ Object.create(null);\n  function defFromValue(value) {\n    if (value && typeof value === \"object\") {\n      var type = value.type;\n      if (typeof type === \"string\" && hasOwn$6.call(defCache, type)) {\n        var d = defCache[type];\n        if (d.finalized) {\n          return d;\n        }\n      }\n    }\n    return null;\n  }\n  class DefImpl extends Def {\n    constructor(typeName) {\n      super(\n        new PredicateType(typeName, (value, deep) => this.check(value, deep)),\n        typeName\n      );\n    }\n    check(value, deep) {\n      if (this.finalized !== true) {\n        throw new Error(\n          \"prematurely checking unfinalized type \" + this.typeName\n        );\n      }\n      if (value === null || typeof value !== \"object\") {\n        return false;\n      }\n      var vDef = defFromValue(value);\n      if (!vDef) {\n        if (this.typeName === \"SourceLocation\" || this.typeName === \"Position\") {\n          return this.checkAllFields(value, deep);\n        }\n        return false;\n      }\n      if (deep && vDef === this) {\n        return this.checkAllFields(value, deep);\n      }\n      if (!this.isSupertypeOf(vDef)) {\n        return false;\n      }\n      if (!deep) {\n        return true;\n      }\n      return vDef.checkAllFields(value, deep) && this.checkAllFields(value, false);\n    }\n    build(...buildParams) {\n      this.buildParams = buildParams;\n      if (this.buildable) {\n        return this;\n      }\n      this.field(\"type\", String, () => this.typeName);\n      this.buildable = true;\n      const addParam = (built, param, arg, isArgAvailable) => {\n        if (hasOwn$6.call(built, param))\n          return;\n        var all = this.allFields;\n        if (!hasOwn$6.call(all, param)) {\n          throw new Error(\"\" + param);\n        }\n        var field = all[param];\n        var type = field.type;\n        var value;\n        if (isArgAvailable) {\n          value = arg;\n        } else if (field.defaultFn) {\n          value = field.defaultFn.call(built);\n        } else {\n          var message = \"no value or default function given for field \" + JSON.stringify(param) + \" of \" + this.typeName + \"(\" + this.buildParams.map(function(name) {\n            return all[name];\n          }).join(\", \") + \")\";\n          throw new Error(message);\n        }\n        if (!type.check(value)) {\n          throw new Error(\n            shallowStringify(value) + \" does not match field \" + field + \" of type \" + this.typeName\n          );\n        }\n        built[param] = value;\n      };\n      const khulnasoft = (...args) => {\n        var argc = args.length;\n        if (!this.finalized) {\n          throw new Error(\n            \"attempting to instantiate unfinalized type \" + this.typeName\n          );\n        }\n        var built = Object.create(nodePrototype);\n        this.buildParams.forEach(function(param, i) {\n          if (i < argc) {\n            addParam(built, param, args[i], true);\n          } else {\n            addParam(built, param, null, false);\n          }\n        });\n        Object.keys(this.allFields).forEach(function(param) {\n          addParam(built, param, null, false);\n        });\n        if (built.type !== this.typeName) {\n          throw new Error(\"\");\n        }\n        return built;\n      };\n      khulnasoft.from = (obj) => {\n        if (!this.finalized) {\n          throw new Error(\n            \"attempting to instantiate unfinalized type \" + this.typeName\n          );\n        }\n        var built = Object.create(nodePrototype);\n        Object.keys(this.allFields).forEach(function(param) {\n          if (hasOwn$6.call(obj, param)) {\n            addParam(built, param, obj[param], true);\n          } else {\n            addParam(built, param, null, false);\n          }\n        });\n        if (built.type !== this.typeName) {\n          throw new Error(\"\");\n        }\n        return built;\n      };\n      Object.defineProperty(khulnasofts, getKhulnasoftName(this.typeName), {\n        enumerable: true,\n        value: khulnasoft\n      });\n      return this;\n    }\n    // The reason fields are specified using .field(...) instead of an object\n    // literal syntax is somewhat subtle: the object literal syntax would\n    // support only one key and one value, but with .field(...) we can pass\n    // any number of arguments to specify the field.\n    field(name, type, defaultFn, hidden) {\n      if (this.finalized) {\n        console.error(\"Ignoring attempt to redefine field \" + JSON.stringify(name) + \" of finalized type \" + JSON.stringify(this.typeName));\n        return this;\n      }\n      this.ownFields[name] = new Field(name, Type.from(type), defaultFn, hidden);\n      return this;\n    }\n    finalize() {\n      if (!this.finalized) {\n        var allFields = this.allFields;\n        var allSupertypes = this.allSupertypes;\n        this.baseNames.forEach((name) => {\n          var def = defCache[name];\n          if (def instanceof Def) {\n            def.finalize();\n            extend(allFields, def.allFields);\n            extend(allSupertypes, def.allSupertypes);\n          } else {\n            var message = \"unknown supertype name \" + JSON.stringify(name) + \" for subtype \" + JSON.stringify(this.typeName);\n            throw new Error(message);\n          }\n        });\n        extend(allFields, this.ownFields);\n        allSupertypes[this.typeName] = this;\n        this.fieldNames.length = 0;\n        for (var fieldName in allFields) {\n          if (hasOwn$6.call(allFields, fieldName) && !allFields[fieldName].hidden) {\n            this.fieldNames.push(fieldName);\n          }\n        }\n        Object.defineProperty(namedTypes, this.typeName, {\n          enumerable: true,\n          value: this.type\n        });\n        this.finalized = true;\n        populateSupertypeList(this.typeName, this.supertypeList);\n        if (this.buildable && this.supertypeList.lastIndexOf(\"Expression\") >= 0) {\n          wrapExpressionKhulnasoftWithStatement(this.typeName);\n        }\n      }\n    }\n  }\n  function getSupertypeNames(typeName) {\n    if (!hasOwn$6.call(defCache, typeName)) {\n      throw new Error(\"\");\n    }\n    var d = defCache[typeName];\n    if (d.finalized !== true) {\n      throw new Error(\"\");\n    }\n    return d.supertypeList.slice(1);\n  }\n  function computeSupertypeLookupTable(candidates) {\n    var table = {};\n    var typeNames = Object.keys(defCache);\n    var typeNameCount = typeNames.length;\n    for (var i = 0; i < typeNameCount; ++i) {\n      var typeName = typeNames[i];\n      var d = defCache[typeName];\n      if (d.finalized !== true) {\n        throw new Error(\"\" + typeName);\n      }\n      for (var j = 0; j < d.supertypeList.length; ++j) {\n        var superTypeName = d.supertypeList[j];\n        if (hasOwn$6.call(candidates, superTypeName)) {\n          table[typeName] = superTypeName;\n          break;\n        }\n      }\n    }\n    return table;\n  }\n  var khulnasofts = /* @__PURE__ */ Object.create(null);\n  var nodePrototype = {};\n  function defineMethod(name, func) {\n    var old = nodePrototype[name];\n    if (isUndefined.check(func)) {\n      delete nodePrototype[name];\n    } else {\n      isFunction.assert(func);\n      Object.defineProperty(nodePrototype, name, {\n        enumerable: true,\n        // For discoverability.\n        configurable: true,\n        // For delete proto[name].\n        value: func\n      });\n    }\n    return old;\n  }\n  function getKhulnasoftName(typeName) {\n    return typeName.replace(/^[A-Z]+/, function(upperCasePrefix) {\n      var len = upperCasePrefix.length;\n      switch (len) {\n        case 0:\n          return \"\";\n        case 1:\n          return upperCasePrefix.toLowerCase();\n        default:\n          return upperCasePrefix.slice(\n            0,\n            len - 1\n          ).toLowerCase() + upperCasePrefix.charAt(len - 1);\n      }\n    });\n  }\n  function getStatementKhulnasoftName(typeName) {\n    typeName = getKhulnasoftName(typeName);\n    return typeName.replace(/(Expression)?$/, \"Statement\");\n  }\n  var namedTypes = {};\n  function getFieldNames(object) {\n    var d = defFromValue(object);\n    if (d) {\n      return d.fieldNames.slice(0);\n    }\n    if (\"type\" in object) {\n      throw new Error(\n        \"did not recognize object of type \" + JSON.stringify(object.type)\n      );\n    }\n    return Object.keys(object);\n  }\n  function getFieldValue(object, fieldName) {\n    var d = defFromValue(object);\n    if (d) {\n      var field = d.allFields[fieldName];\n      if (field) {\n        return field.getValue(object);\n      }\n    }\n    return object && object[fieldName];\n  }\n  function eachField(object, callback, context) {\n    getFieldNames(object).forEach(function(name) {\n      callback.call(this, name, getFieldValue(object, name));\n    }, context);\n  }\n  function someField(object, callback, context) {\n    return getFieldNames(object).some(function(name) {\n      return callback.call(this, name, getFieldValue(object, name));\n    }, context);\n  }\n  function wrapExpressionKhulnasoftWithStatement(typeName) {\n    var wrapperName = getStatementKhulnasoftName(typeName);\n    if (khulnasofts[wrapperName])\n      return;\n    var wrapped = khulnasofts[getKhulnasoftName(typeName)];\n    if (!wrapped)\n      return;\n    const khulnasoft = function(...args) {\n      return khulnasofts.expressionStatement(wrapped.apply(khulnasofts, args));\n    };\n    khulnasoft.from = function(...args) {\n      return khulnasofts.expressionStatement(wrapped.from.apply(khulnasofts, args));\n    };\n    khulnasofts[wrapperName] = khulnasoft;\n  }\n  function populateSupertypeList(typeName, list) {\n    list.length = 0;\n    list.push(typeName);\n    var lastSeen = /* @__PURE__ */ Object.create(null);\n    for (var pos = 0; pos < list.length; ++pos) {\n      typeName = list[pos];\n      var d = defCache[typeName];\n      if (d.finalized !== true) {\n        throw new Error(\"\");\n      }\n      if (hasOwn$6.call(lastSeen, typeName)) {\n        delete list[lastSeen[typeName]];\n      }\n      lastSeen[typeName] = pos;\n      list.push.apply(list, d.baseNames);\n    }\n    for (var to = 0, from = to, len = list.length; from < len; ++from) {\n      if (hasOwn$6.call(list, from)) {\n        list[to++] = list[from];\n      }\n    }\n    list.length = to;\n  }\n  function extend(into, from) {\n    Object.keys(from).forEach(function(name) {\n      into[name] = from[name];\n    });\n    return into;\n  }\n  function finalize() {\n    Object.keys(defCache).forEach(function(name) {\n      defCache[name].finalize();\n    });\n  }\n  return {\n    Type,\n    builtInTypes,\n    getSupertypeNames,\n    computeSupertypeLookupTable,\n    khulnasofts,\n    defineMethod,\n    getKhulnasoftName,\n    getStatementKhulnasoftName,\n    namedTypes,\n    getFieldNames,\n    getFieldValue,\n    eachField,\n    someField,\n    finalize\n  };\n}\nmaybeSetModuleExports(() => module);\n\nvar Op = Object.prototype;\nvar hasOwn$5 = Op.hasOwnProperty;\nfunction pathPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var isArray = types.builtInTypes.array;\n  var isNumber = types.builtInTypes.number;\n  const Path = function Path2(value, parentPath, name) {\n    if (!(this instanceof Path2)) {\n      throw new Error(\"Path constructor cannot be invoked without 'new'\");\n    }\n    if (parentPath) {\n      if (!(parentPath instanceof Path2)) {\n        throw new Error(\"\");\n      }\n    } else {\n      parentPath = null;\n      name = null;\n    }\n    this.value = value;\n    this.parentPath = parentPath;\n    this.name = name;\n    this.__childCache = null;\n  };\n  var Pp = Path.prototype;\n  function getChildCache(path) {\n    return path.__childCache || (path.__childCache = /* @__PURE__ */ Object.create(null));\n  }\n  function getChildPath(path, name) {\n    var cache = getChildCache(path);\n    var actualChildValue = path.getValueProperty(name);\n    var childPath = cache[name];\n    if (!hasOwn$5.call(cache, name) || // Ensure consistency between cache and reality.\n    childPath.value !== actualChildValue) {\n      childPath = cache[name] = new path.constructor(\n        actualChildValue,\n        path,\n        name\n      );\n    }\n    return childPath;\n  }\n  Pp.getValueProperty = function getValueProperty(name) {\n    return this.value[name];\n  };\n  Pp.get = function get(...names) {\n    var path = this;\n    var count = names.length;\n    for (var i = 0; i < count; ++i) {\n      path = getChildPath(path, names[i]);\n    }\n    return path;\n  };\n  Pp.each = function each(callback, context) {\n    var childPaths = [];\n    var len = this.value.length;\n    var i = 0;\n    for (var i = 0; i < len; ++i) {\n      if (hasOwn$5.call(this.value, i)) {\n        childPaths[i] = this.get(i);\n      }\n    }\n    context = context || this;\n    for (i = 0; i < len; ++i) {\n      if (hasOwn$5.call(childPaths, i)) {\n        callback.call(context, childPaths[i]);\n      }\n    }\n  };\n  Pp.map = function map(callback, context) {\n    var result = [];\n    this.each(function(childPath) {\n      result.push(callback.call(this, childPath));\n    }, context);\n    return result;\n  };\n  Pp.filter = function filter(callback, context) {\n    var result = [];\n    this.each(function(childPath) {\n      if (callback.call(this, childPath)) {\n        result.push(childPath);\n      }\n    }, context);\n    return result;\n  };\n  function emptyMoves() {\n  }\n  function getMoves(path, offset, start, end) {\n    isArray.assert(path.value);\n    if (offset === 0) {\n      return emptyMoves;\n    }\n    var length = path.value.length;\n    if (length < 1) {\n      return emptyMoves;\n    }\n    var argc = arguments.length;\n    if (argc === 2) {\n      start = 0;\n      end = length;\n    } else if (argc === 3) {\n      start = Math.max(start, 0);\n      end = length;\n    } else {\n      start = Math.max(start, 0);\n      end = Math.min(end, length);\n    }\n    isNumber.assert(start);\n    isNumber.assert(end);\n    var moves = /* @__PURE__ */ Object.create(null);\n    var cache = getChildCache(path);\n    for (var i = start; i < end; ++i) {\n      if (hasOwn$5.call(path.value, i)) {\n        var childPath = path.get(i);\n        if (childPath.name !== i) {\n          throw new Error(\"\");\n        }\n        var newIndex = i + offset;\n        childPath.name = newIndex;\n        moves[newIndex] = childPath;\n        delete cache[i];\n      }\n    }\n    delete cache.length;\n    return function() {\n      for (var newIndex2 in moves) {\n        var childPath2 = moves[newIndex2];\n        if (childPath2.name !== +newIndex2) {\n          throw new Error(\"\");\n        }\n        cache[newIndex2] = childPath2;\n        path.value[newIndex2] = childPath2.value;\n      }\n    };\n  }\n  Pp.shift = function shift() {\n    var move = getMoves(this, -1);\n    var result = this.value.shift();\n    move();\n    return result;\n  };\n  Pp.unshift = function unshift(...args) {\n    var move = getMoves(this, args.length);\n    var result = this.value.unshift.apply(this.value, args);\n    move();\n    return result;\n  };\n  Pp.push = function push(...args) {\n    isArray.assert(this.value);\n    delete getChildCache(this).length;\n    return this.value.push.apply(this.value, args);\n  };\n  Pp.pop = function pop() {\n    isArray.assert(this.value);\n    var cache = getChildCache(this);\n    delete cache[this.value.length - 1];\n    delete cache.length;\n    return this.value.pop();\n  };\n  Pp.insertAt = function insertAt(index) {\n    var argc = arguments.length;\n    var move = getMoves(this, argc - 1, index);\n    if (move === emptyMoves && argc <= 1) {\n      return this;\n    }\n    index = Math.max(index, 0);\n    for (var i = 1; i < argc; ++i) {\n      this.value[index + i - 1] = arguments[i];\n    }\n    move();\n    return this;\n  };\n  Pp.insertBefore = function insertBefore(...args) {\n    var pp = this.parentPath;\n    var argc = args.length;\n    var insertAtArgs = [this.name];\n    for (var i = 0; i < argc; ++i) {\n      insertAtArgs.push(args[i]);\n    }\n    return pp.insertAt.apply(pp, insertAtArgs);\n  };\n  Pp.insertAfter = function insertAfter(...args) {\n    var pp = this.parentPath;\n    var argc = args.length;\n    var insertAtArgs = [this.name + 1];\n    for (var i = 0; i < argc; ++i) {\n      insertAtArgs.push(args[i]);\n    }\n    return pp.insertAt.apply(pp, insertAtArgs);\n  };\n  function repairRelationshipWithParent(path) {\n    if (!(path instanceof Path)) {\n      throw new Error(\"\");\n    }\n    var pp = path.parentPath;\n    if (!pp) {\n      return path;\n    }\n    var parentValue = pp.value;\n    var parentCache = getChildCache(pp);\n    if (parentValue[path.name] === path.value) {\n      parentCache[path.name] = path;\n    } else if (isArray.check(parentValue)) {\n      var i = parentValue.indexOf(path.value);\n      if (i >= 0) {\n        parentCache[path.name = i] = path;\n      }\n    } else {\n      parentValue[path.name] = path.value;\n      parentCache[path.name] = path;\n    }\n    if (parentValue[path.name] !== path.value) {\n      throw new Error(\"\");\n    }\n    if (path.parentPath.get(path.name) !== path) {\n      throw new Error(\"\");\n    }\n    return path;\n  }\n  Pp.replace = function replace(replacement) {\n    var results = [];\n    var parentValue = this.parentPath.value;\n    var parentCache = getChildCache(this.parentPath);\n    var count = arguments.length;\n    repairRelationshipWithParent(this);\n    if (isArray.check(parentValue)) {\n      var originalLength = parentValue.length;\n      var move = getMoves(this.parentPath, count - 1, this.name + 1);\n      var spliceArgs = [this.name, 1];\n      for (var i = 0; i < count; ++i) {\n        spliceArgs.push(arguments[i]);\n      }\n      var splicedOut = parentValue.splice.apply(parentValue, spliceArgs);\n      if (splicedOut[0] !== this.value) {\n        throw new Error(\"\");\n      }\n      if (parentValue.length !== originalLength - 1 + count) {\n        throw new Error(\"\");\n      }\n      move();\n      if (count === 0) {\n        delete this.value;\n        delete parentCache[this.name];\n        this.__childCache = null;\n      } else {\n        if (parentValue[this.name] !== replacement) {\n          throw new Error(\"\");\n        }\n        if (this.value !== replacement) {\n          this.value = replacement;\n          this.__childCache = null;\n        }\n        for (i = 0; i < count; ++i) {\n          results.push(this.parentPath.get(this.name + i));\n        }\n        if (results[0] !== this) {\n          throw new Error(\"\");\n        }\n      }\n    } else if (count === 1) {\n      if (this.value !== replacement) {\n        this.__childCache = null;\n      }\n      this.value = parentValue[this.name] = replacement;\n      results.push(this);\n    } else if (count === 0) {\n      delete parentValue[this.name];\n      delete this.value;\n      this.__childCache = null;\n    } else {\n      throw new Error(\"Could not replace path\");\n    }\n    return results;\n  };\n  return Path;\n}\nmaybeSetModuleExports(() => module);\n\nvar hasOwn$4 = Object.prototype.hasOwnProperty;\nfunction scopePlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var namedTypes = types.namedTypes;\n  var Node = namedTypes.Node;\n  var Expression = namedTypes.Expression;\n  var isArray = types.builtInTypes.array;\n  var b = types.khulnasofts;\n  const Scope = function Scope2(path, parentScope) {\n    if (!(this instanceof Scope2)) {\n      throw new Error(\"Scope constructor cannot be invoked without 'new'\");\n    }\n    if (!TypeParameterScopeType.check(path.value)) {\n      ScopeType.assert(path.value);\n    }\n    var depth;\n    if (parentScope) {\n      if (!(parentScope instanceof Scope2)) {\n        throw new Error(\"\");\n      }\n      depth = parentScope.depth + 1;\n    } else {\n      parentScope = null;\n      depth = 0;\n    }\n    Object.defineProperties(this, {\n      path: { value: path },\n      node: { value: path.value },\n      isGlobal: { value: !parentScope, enumerable: true },\n      depth: { value: depth },\n      parent: { value: parentScope },\n      bindings: { value: {} },\n      types: { value: {} }\n    });\n  };\n  var ScopeType = Type.or(\n    // Program nodes introduce global scopes.\n    namedTypes.Program,\n    // Function is the supertype of FunctionExpression,\n    // FunctionDeclaration, ArrowExpression, etc.\n    namedTypes.Function,\n    // In case you didn't know, the caught parameter shadows any variable\n    // of the same name in an outer scope.\n    namedTypes.CatchClause\n  );\n  var TypeParameterScopeType = Type.or(\n    namedTypes.Function,\n    namedTypes.ClassDeclaration,\n    namedTypes.ClassExpression,\n    namedTypes.InterfaceDeclaration,\n    namedTypes.TSInterfaceDeclaration,\n    namedTypes.TypeAlias,\n    namedTypes.TSTypeAliasDeclaration\n  );\n  var FlowOrTSTypeParameterType = Type.or(\n    namedTypes.TypeParameter,\n    namedTypes.TSTypeParameter\n  );\n  Scope.isEstablishedBy = function(node) {\n    return ScopeType.check(node) || TypeParameterScopeType.check(node);\n  };\n  var Sp = Scope.prototype;\n  Sp.didScan = false;\n  Sp.declares = function(name) {\n    this.scan();\n    return hasOwn$4.call(this.bindings, name);\n  };\n  Sp.declaresType = function(name) {\n    this.scan();\n    return hasOwn$4.call(this.types, name);\n  };\n  Sp.declareTemporary = function(prefix) {\n    if (prefix) {\n      if (!/^[a-z$_]/i.test(prefix)) {\n        throw new Error(\"\");\n      }\n    } else {\n      prefix = \"t$\";\n    }\n    prefix += this.depth.toString(36) + \"$\";\n    this.scan();\n    var index = 0;\n    while (this.declares(prefix + index)) {\n      ++index;\n    }\n    var name = prefix + index;\n    return this.bindings[name] = types.khulnasofts.identifier(name);\n  };\n  Sp.injectTemporary = function(identifier, init) {\n    identifier || (identifier = this.declareTemporary());\n    var bodyPath = this.path.get(\"body\");\n    if (namedTypes.BlockStatement.check(bodyPath.value)) {\n      bodyPath = bodyPath.get(\"body\");\n    }\n    bodyPath.unshift(\n      b.variableDeclaration(\n        \"var\",\n        [b.variableDeclarator(identifier, init || null)]\n      )\n    );\n    return identifier;\n  };\n  Sp.scan = function(force) {\n    if (force || !this.didScan) {\n      for (var name in this.bindings) {\n        delete this.bindings[name];\n      }\n      for (var name in this.types) {\n        delete this.types[name];\n      }\n      scanScope(this.path, this.bindings, this.types);\n      this.didScan = true;\n    }\n  };\n  Sp.getBindings = function() {\n    this.scan();\n    return this.bindings;\n  };\n  Sp.getTypes = function() {\n    this.scan();\n    return this.types;\n  };\n  function scanScope(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (TypeParameterScopeType.check(node)) {\n      const params = path.get(\"typeParameters\", \"params\");\n      if (isArray.check(params.value)) {\n        params.each((childPath) => {\n          addTypeParameter(childPath, scopeTypes);\n        });\n      }\n    }\n    if (ScopeType.check(node)) {\n      if (namedTypes.CatchClause.check(node)) {\n        addPattern(path.get(\"param\"), bindings);\n      } else {\n        recursiveScanScope(path, bindings, scopeTypes);\n      }\n    }\n  }\n  function recursiveScanScope(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (path.parent && namedTypes.FunctionExpression.check(path.parent.node) && path.parent.node.id) {\n      addPattern(path.parent.get(\"id\"), bindings);\n    }\n    if (!node) ; else if (isArray.check(node)) {\n      path.each((childPath) => {\n        recursiveScanChild(childPath, bindings, scopeTypes);\n      });\n    } else if (namedTypes.Function.check(node)) {\n      path.get(\"params\").each((paramPath) => {\n        addPattern(paramPath, bindings);\n      });\n      recursiveScanChild(path.get(\"body\"), bindings, scopeTypes);\n      recursiveScanScope(path.get(\"typeParameters\"), bindings, scopeTypes);\n    } else if (namedTypes.TypeAlias && namedTypes.TypeAlias.check(node) || namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node) || namedTypes.TSTypeAliasDeclaration && namedTypes.TSTypeAliasDeclaration.check(node) || namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node)) {\n      addTypePattern(path.get(\"id\"), scopeTypes);\n    } else if (namedTypes.VariableDeclarator.check(node)) {\n      addPattern(path.get(\"id\"), bindings);\n      recursiveScanChild(path.get(\"init\"), bindings, scopeTypes);\n    } else if (node.type === \"ImportSpecifier\" || node.type === \"ImportNamespaceSpecifier\" || node.type === \"ImportDefaultSpecifier\") {\n      addPattern(\n        // Esprima used to use the .name field to refer to the local\n        // binding identifier for ImportSpecifier nodes, but .id for\n        // ImportNamespaceSpecifier and ImportDefaultSpecifier nodes.\n        // ESTree/Acorn/ESpree use .local for all three node types.\n        path.get(node.local ? \"local\" : node.name ? \"name\" : \"id\"),\n        bindings\n      );\n    } else if (Node.check(node) && !Expression.check(node)) {\n      types.eachField(node, function(name, child) {\n        var childPath = path.get(name);\n        if (!pathHasValue(childPath, child)) {\n          throw new Error(\"\");\n        }\n        recursiveScanChild(childPath, bindings, scopeTypes);\n      });\n    }\n  }\n  function pathHasValue(path, value) {\n    if (path.value === value) {\n      return true;\n    }\n    if (Array.isArray(path.value) && path.value.length === 0 && Array.isArray(value) && value.length === 0) {\n      return true;\n    }\n    return false;\n  }\n  function recursiveScanChild(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (!node || Expression.check(node)) ; else if (namedTypes.FunctionDeclaration.check(node) && node.id !== null) {\n      addPattern(path.get(\"id\"), bindings);\n    } else if (namedTypes.ClassDeclaration && namedTypes.ClassDeclaration.check(node) && node.id !== null) {\n      addPattern(path.get(\"id\"), bindings);\n      recursiveScanScope(path.get(\"typeParameters\"), bindings, scopeTypes);\n    } else if (namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node) || namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node)) {\n      addTypePattern(path.get(\"id\"), scopeTypes);\n    } else if (ScopeType.check(node)) {\n      if (namedTypes.CatchClause.check(node) && // TODO Broaden this to accept any pattern.\n      namedTypes.Identifier.check(node.param)) {\n        var catchParamName = node.param.name;\n        var hadBinding = hasOwn$4.call(bindings, catchParamName);\n        recursiveScanScope(path.get(\"body\"), bindings, scopeTypes);\n        if (!hadBinding) {\n          delete bindings[catchParamName];\n        }\n      }\n    } else {\n      recursiveScanScope(path, bindings, scopeTypes);\n    }\n  }\n  function addPattern(patternPath, bindings) {\n    var pattern = patternPath.value;\n    namedTypes.Pattern.assert(pattern);\n    if (namedTypes.Identifier.check(pattern)) {\n      if (hasOwn$4.call(bindings, pattern.name)) {\n        bindings[pattern.name].push(patternPath);\n      } else {\n        bindings[pattern.name] = [patternPath];\n      }\n    } else if (namedTypes.AssignmentPattern && namedTypes.AssignmentPattern.check(pattern)) {\n      addPattern(patternPath.get(\"left\"), bindings);\n    } else if (namedTypes.ObjectPattern && namedTypes.ObjectPattern.check(pattern)) {\n      patternPath.get(\"properties\").each(function(propertyPath) {\n        var property = propertyPath.value;\n        if (namedTypes.Pattern.check(property)) {\n          addPattern(propertyPath, bindings);\n        } else if (namedTypes.Property.check(property) || namedTypes.ObjectProperty && namedTypes.ObjectProperty.check(property)) {\n          addPattern(propertyPath.get(\"value\"), bindings);\n        } else if (namedTypes.SpreadProperty && namedTypes.SpreadProperty.check(property)) {\n          addPattern(propertyPath.get(\"argument\"), bindings);\n        }\n      });\n    } else if (namedTypes.ArrayPattern && namedTypes.ArrayPattern.check(pattern)) {\n      patternPath.get(\"elements\").each(function(elementPath) {\n        var element = elementPath.value;\n        if (namedTypes.Pattern.check(element)) {\n          addPattern(elementPath, bindings);\n        } else if (namedTypes.SpreadElement && namedTypes.SpreadElement.check(element)) {\n          addPattern(elementPath.get(\"argument\"), bindings);\n        }\n      });\n    } else if (namedTypes.PropertyPattern && namedTypes.PropertyPattern.check(pattern)) {\n      addPattern(patternPath.get(\"pattern\"), bindings);\n    } else if (namedTypes.SpreadElementPattern && namedTypes.SpreadElementPattern.check(pattern) || namedTypes.RestElement && namedTypes.RestElement.check(pattern) || namedTypes.SpreadPropertyPattern && namedTypes.SpreadPropertyPattern.check(pattern)) {\n      addPattern(patternPath.get(\"argument\"), bindings);\n    }\n  }\n  function addTypePattern(patternPath, types2) {\n    var pattern = patternPath.value;\n    namedTypes.Pattern.assert(pattern);\n    if (namedTypes.Identifier.check(pattern)) {\n      if (hasOwn$4.call(types2, pattern.name)) {\n        types2[pattern.name].push(patternPath);\n      } else {\n        types2[pattern.name] = [patternPath];\n      }\n    }\n  }\n  function addTypeParameter(parameterPath, types2) {\n    var parameter = parameterPath.value;\n    FlowOrTSTypeParameterType.assert(parameter);\n    if (hasOwn$4.call(types2, parameter.name)) {\n      types2[parameter.name].push(parameterPath);\n    } else {\n      types2[parameter.name] = [parameterPath];\n    }\n  }\n  Sp.lookup = function(name) {\n    for (var scope = this; scope; scope = scope.parent)\n      if (scope.declares(name))\n        break;\n    return scope;\n  };\n  Sp.lookupType = function(name) {\n    for (var scope = this; scope; scope = scope.parent)\n      if (scope.declaresType(name))\n        break;\n    return scope;\n  };\n  Sp.getGlobalScope = function() {\n    var scope = this;\n    while (!scope.isGlobal)\n      scope = scope.parent;\n    return scope;\n  };\n  return Scope;\n}\nmaybeSetModuleExports(() => module);\n\nfunction nodePathPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var n = types.namedTypes;\n  var b = types.khulnasofts;\n  var isNumber = types.builtInTypes.number;\n  var isArray = types.builtInTypes.array;\n  var Path2 = fork.use(pathPlugin);\n  var Scope2 = fork.use(scopePlugin);\n  const NodePath = function NodePath2(value, parentPath, name) {\n    if (!(this instanceof NodePath2)) {\n      throw new Error(\"NodePath constructor cannot be invoked without 'new'\");\n    }\n    Path2.call(this, value, parentPath, name);\n  };\n  var NPp = NodePath.prototype = Object.create(Path2.prototype, {\n    constructor: {\n      value: NodePath,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperties(NPp, {\n    node: {\n      get: function() {\n        Object.defineProperty(this, \"node\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeNode()\n        });\n        return this.node;\n      }\n    },\n    parent: {\n      get: function() {\n        Object.defineProperty(this, \"parent\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeParent()\n        });\n        return this.parent;\n      }\n    },\n    scope: {\n      get: function() {\n        Object.defineProperty(this, \"scope\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeScope()\n        });\n        return this.scope;\n      }\n    }\n  });\n  NPp.replace = function() {\n    delete this.node;\n    delete this.parent;\n    delete this.scope;\n    return Path2.prototype.replace.apply(this, arguments);\n  };\n  NPp.prune = function() {\n    var remainingNodePath = this.parent;\n    this.replace();\n    return cleanUpNodesAfterPrune(remainingNodePath);\n  };\n  NPp._computeNode = function() {\n    var value = this.value;\n    if (n.Node.check(value)) {\n      return value;\n    }\n    var pp = this.parentPath;\n    return pp && pp.node || null;\n  };\n  NPp._computeParent = function() {\n    var value = this.value;\n    var pp = this.parentPath;\n    if (!n.Node.check(value)) {\n      while (pp && !n.Node.check(pp.value)) {\n        pp = pp.parentPath;\n      }\n      if (pp) {\n        pp = pp.parentPath;\n      }\n    }\n    while (pp && !n.Node.check(pp.value)) {\n      pp = pp.parentPath;\n    }\n    return pp || null;\n  };\n  NPp._computeScope = function() {\n    var value = this.value;\n    var pp = this.parentPath;\n    var scope = pp && pp.scope;\n    if (n.Node.check(value) && Scope2.isEstablishedBy(value)) {\n      scope = new Scope2(this, scope);\n    }\n    return scope || null;\n  };\n  NPp.getValueProperty = function(name) {\n    return types.getFieldValue(this.value, name);\n  };\n  NPp.needsParens = function(assumeExpressionContext) {\n    var pp = this.parentPath;\n    if (!pp) {\n      return false;\n    }\n    var node = this.value;\n    if (!n.Expression.check(node)) {\n      return false;\n    }\n    if (node.type === \"Identifier\") {\n      return false;\n    }\n    while (!n.Node.check(pp.value)) {\n      pp = pp.parentPath;\n      if (!pp) {\n        return false;\n      }\n    }\n    var parent = pp.value;\n    switch (node.type) {\n      case \"UnaryExpression\":\n      case \"SpreadElement\":\n      case \"SpreadProperty\":\n        return parent.type === \"MemberExpression\" && this.name === \"object\" && parent.object === node;\n      case \"BinaryExpression\":\n      case \"LogicalExpression\":\n        switch (parent.type) {\n          case \"CallExpression\":\n            return this.name === \"callee\" && parent.callee === node;\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n            return true;\n          case \"MemberExpression\":\n            return this.name === \"object\" && parent.object === node;\n          case \"BinaryExpression\":\n          case \"LogicalExpression\": {\n            const n2 = node;\n            const po = parent.operator;\n            const pp2 = PRECEDENCE[po];\n            const no = n2.operator;\n            const np = PRECEDENCE[no];\n            if (pp2 > np) {\n              return true;\n            }\n            if (pp2 === np && this.name === \"right\") {\n              if (parent.right !== n2) {\n                throw new Error(\"Nodes must be equal\");\n              }\n              return true;\n            }\n          }\n          default:\n            return false;\n        }\n      case \"SequenceExpression\":\n        switch (parent.type) {\n          case \"ForStatement\":\n            return false;\n          case \"ExpressionStatement\":\n            return this.name !== \"expression\";\n          default:\n            return true;\n        }\n      case \"YieldExpression\":\n        switch (parent.type) {\n          case \"BinaryExpression\":\n          case \"LogicalExpression\":\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n          case \"CallExpression\":\n          case \"MemberExpression\":\n          case \"NewExpression\":\n          case \"ConditionalExpression\":\n          case \"YieldExpression\":\n            return true;\n          default:\n            return false;\n        }\n      case \"Literal\":\n        return parent.type === \"MemberExpression\" && isNumber.check(node.value) && this.name === \"object\" && parent.object === node;\n      case \"AssignmentExpression\":\n      case \"ConditionalExpression\":\n        switch (parent.type) {\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n          case \"BinaryExpression\":\n          case \"LogicalExpression\":\n            return true;\n          case \"CallExpression\":\n            return this.name === \"callee\" && parent.callee === node;\n          case \"ConditionalExpression\":\n            return this.name === \"test\" && parent.test === node;\n          case \"MemberExpression\":\n            return this.name === \"object\" && parent.object === node;\n          default:\n            return false;\n        }\n      default:\n        if (parent.type === \"NewExpression\" && this.name === \"callee\" && parent.callee === node) {\n          return containsCallExpression(node);\n        }\n    }\n    if (assumeExpressionContext !== true && !this.canBeFirstInStatement() && this.firstInStatement())\n      return true;\n    return false;\n  };\n  function isBinary(node) {\n    return n.BinaryExpression.check(node) || n.LogicalExpression.check(node);\n  }\n  var PRECEDENCE = {};\n  [\n    [\"||\"],\n    [\"&&\"],\n    [\"|\"],\n    [\"^\"],\n    [\"&\"],\n    [\"==\", \"===\", \"!=\", \"!==\"],\n    [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n    [\">>\", \"<<\", \">>>\"],\n    [\"+\", \"-\"],\n    [\"*\", \"/\", \"%\"]\n  ].forEach(function(tier, i) {\n    tier.forEach(function(op) {\n      PRECEDENCE[op] = i;\n    });\n  });\n  function containsCallExpression(node) {\n    if (n.CallExpression.check(node)) {\n      return true;\n    }\n    if (isArray.check(node)) {\n      return node.some(containsCallExpression);\n    }\n    if (n.Node.check(node)) {\n      return types.someField(node, function(_name, child) {\n        return containsCallExpression(child);\n      });\n    }\n    return false;\n  }\n  NPp.canBeFirstInStatement = function() {\n    var node = this.node;\n    return !n.FunctionExpression.check(node) && !n.ObjectExpression.check(node);\n  };\n  NPp.firstInStatement = function() {\n    return firstInStatement(this);\n  };\n  function firstInStatement(path) {\n    for (var node, parent; path.parent; path = path.parent) {\n      node = path.node;\n      parent = path.parent.node;\n      if (n.BlockStatement.check(parent) && path.parent.name === \"body\" && path.name === 0) {\n        if (parent.body[0] !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        return true;\n      }\n      if (n.ExpressionStatement.check(parent) && path.name === \"expression\") {\n        if (parent.expression !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        return true;\n      }\n      if (n.SequenceExpression.check(parent) && path.parent.name === \"expressions\" && path.name === 0) {\n        if (parent.expressions[0] !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.CallExpression.check(parent) && path.name === \"callee\") {\n        if (parent.callee !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.MemberExpression.check(parent) && path.name === \"object\") {\n        if (parent.object !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.ConditionalExpression.check(parent) && path.name === \"test\") {\n        if (parent.test !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (isBinary(parent) && path.name === \"left\") {\n        if (parent.left !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.UnaryExpression.check(parent) && !parent.prefix && path.name === \"argument\") {\n        if (parent.argument !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  function cleanUpNodesAfterPrune(remainingNodePath) {\n    if (n.VariableDeclaration.check(remainingNodePath.node)) {\n      var declarations = remainingNodePath.get(\"declarations\").value;\n      if (!declarations || declarations.length === 0) {\n        return remainingNodePath.prune();\n      }\n    } else if (n.ExpressionStatement.check(remainingNodePath.node)) {\n      if (!remainingNodePath.get(\"expression\").value) {\n        return remainingNodePath.prune();\n      }\n    } else if (n.IfStatement.check(remainingNodePath.node)) {\n      cleanUpIfStatementAfterPrune(remainingNodePath);\n    }\n    return remainingNodePath;\n  }\n  function cleanUpIfStatementAfterPrune(ifStatement) {\n    var testExpression = ifStatement.get(\"test\").value;\n    var alternate = ifStatement.get(\"alternate\").value;\n    var consequent = ifStatement.get(\"consequent\").value;\n    if (!consequent && !alternate) {\n      var testExpressionStatement = b.expressionStatement(testExpression);\n      ifStatement.replace(testExpressionStatement);\n    } else if (!consequent && alternate) {\n      var negatedTestExpression = b.unaryExpression(\"!\", testExpression, true);\n      if (n.UnaryExpression.check(testExpression) && testExpression.operator === \"!\") {\n        negatedTestExpression = testExpression.argument;\n      }\n      ifStatement.get(\"test\").replace(negatedTestExpression);\n      ifStatement.get(\"consequent\").replace(alternate);\n      ifStatement.get(\"alternate\").replace();\n    }\n  }\n  return NodePath;\n}\nmaybeSetModuleExports(() => module);\n\nvar hasOwn$3 = Object.prototype.hasOwnProperty;\nfunction pathVisitorPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var NodePath2 = fork.use(nodePathPlugin);\n  var isArray = types.builtInTypes.array;\n  var isObject = types.builtInTypes.object;\n  var isFunction = types.builtInTypes.function;\n  var undefined$1;\n  const PathVisitor = function PathVisitor2() {\n    if (!(this instanceof PathVisitor2)) {\n      throw new Error(\n        \"PathVisitor constructor cannot be invoked without 'new'\"\n      );\n    }\n    this._reusableContextStack = [];\n    this._methodNameTable = computeMethodNameTable(this);\n    this._shouldVisitComments = hasOwn$3.call(this._methodNameTable, \"Block\") || hasOwn$3.call(this._methodNameTable, \"Line\");\n    this.Context = makeContextConstructor(this);\n    this._visiting = false;\n    this._changeReported = false;\n  };\n  function computeMethodNameTable(visitor) {\n    var typeNames = /* @__PURE__ */ Object.create(null);\n    for (var methodName in visitor) {\n      if (/^visit[A-Z]/.test(methodName)) {\n        typeNames[methodName.slice(\"visit\".length)] = true;\n      }\n    }\n    var supertypeTable = types.computeSupertypeLookupTable(typeNames);\n    var methodNameTable = /* @__PURE__ */ Object.create(null);\n    var typeNameKeys = Object.keys(supertypeTable);\n    var typeNameCount = typeNameKeys.length;\n    for (var i = 0; i < typeNameCount; ++i) {\n      var typeName = typeNameKeys[i];\n      methodName = \"visit\" + supertypeTable[typeName];\n      if (isFunction.check(visitor[methodName])) {\n        methodNameTable[typeName] = methodName;\n      }\n    }\n    return methodNameTable;\n  }\n  PathVisitor.fromMethodsObject = function fromMethodsObject(methods) {\n    if (methods instanceof PathVisitor) {\n      return methods;\n    }\n    if (!isObject.check(methods)) {\n      return new PathVisitor();\n    }\n    const Visitor = function Visitor2() {\n      if (!(this instanceof Visitor2)) {\n        throw new Error(\n          \"Visitor constructor cannot be invoked without 'new'\"\n        );\n      }\n      PathVisitor.call(this);\n    };\n    var Vp = Visitor.prototype = Object.create(PVp);\n    Vp.constructor = Visitor;\n    extend(Vp, methods);\n    extend(Visitor, PathVisitor);\n    isFunction.assert(Visitor.fromMethodsObject);\n    isFunction.assert(Visitor.visit);\n    return new Visitor();\n  };\n  function extend(target, source) {\n    for (var property in source) {\n      if (hasOwn$3.call(source, property)) {\n        target[property] = source[property];\n      }\n    }\n    return target;\n  }\n  PathVisitor.visit = function visit(node, methods) {\n    return PathVisitor.fromMethodsObject(methods).visit(node);\n  };\n  var PVp = PathVisitor.prototype;\n  PVp.visit = function() {\n    if (this._visiting) {\n      throw new Error(\n        \"Recursively calling visitor.visit(path) resets visitor state. Try this.visit(path) or this.traverse(path) instead.\"\n      );\n    }\n    this._visiting = true;\n    this._changeReported = false;\n    this._abortRequested = false;\n    var argc = arguments.length;\n    var args = new Array(argc);\n    for (var i = 0; i < argc; ++i) {\n      args[i] = arguments[i];\n    }\n    if (!(args[0] instanceof NodePath2)) {\n      args[0] = new NodePath2({ root: args[0] }).get(\"root\");\n    }\n    this.reset.apply(this, args);\n    var didNotThrow;\n    try {\n      var root = this.visitWithoutReset(args[0]);\n      didNotThrow = true;\n    } finally {\n      this._visiting = false;\n      if (!didNotThrow && this._abortRequested) {\n        return args[0].value;\n      }\n    }\n    return root;\n  };\n  PVp.AbortRequest = function AbortRequest() {\n  };\n  PVp.abort = function() {\n    var visitor = this;\n    visitor._abortRequested = true;\n    var request = new visitor.AbortRequest();\n    request.cancel = function() {\n      visitor._abortRequested = false;\n    };\n    throw request;\n  };\n  PVp.reset = function(_path) {\n  };\n  PVp.visitWithoutReset = function(path) {\n    if (this instanceof this.Context) {\n      return this.visitor.visitWithoutReset(path);\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    var value = path.value;\n    var methodName = value && typeof value === \"object\" && typeof value.type === \"string\" && this._methodNameTable[value.type];\n    if (methodName) {\n      var context = this.acquireContext(path);\n      try {\n        return context.invokeVisitorMethod(methodName);\n      } finally {\n        this.releaseContext(context);\n      }\n    } else {\n      return visitChildren(path, this);\n    }\n  };\n  function visitChildren(path, visitor) {\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(visitor instanceof PathVisitor)) {\n      throw new Error(\"\");\n    }\n    var value = path.value;\n    if (isArray.check(value)) {\n      path.each(visitor.visitWithoutReset, visitor);\n    } else if (!isObject.check(value)) ; else {\n      var childNames = types.getFieldNames(value);\n      if (visitor._shouldVisitComments && value.comments && childNames.indexOf(\"comments\") < 0) {\n        childNames.push(\"comments\");\n      }\n      var childCount = childNames.length;\n      var childPaths = [];\n      for (var i = 0; i < childCount; ++i) {\n        var childName = childNames[i];\n        if (!hasOwn$3.call(value, childName)) {\n          value[childName] = types.getFieldValue(value, childName);\n        }\n        childPaths.push(path.get(childName));\n      }\n      for (var i = 0; i < childCount; ++i) {\n        visitor.visitWithoutReset(childPaths[i]);\n      }\n    }\n    return path.value;\n  }\n  PVp.acquireContext = function(path) {\n    if (this._reusableContextStack.length === 0) {\n      return new this.Context(path);\n    }\n    return this._reusableContextStack.pop().reset(path);\n  };\n  PVp.releaseContext = function(context) {\n    if (!(context instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    this._reusableContextStack.push(context);\n    context.currentPath = null;\n  };\n  PVp.reportChanged = function() {\n    this._changeReported = true;\n  };\n  PVp.wasChangeReported = function() {\n    return this._changeReported;\n  };\n  function makeContextConstructor(visitor) {\n    function Context(path) {\n      if (!(this instanceof Context)) {\n        throw new Error(\"\");\n      }\n      if (!(this instanceof PathVisitor)) {\n        throw new Error(\"\");\n      }\n      if (!(path instanceof NodePath2)) {\n        throw new Error(\"\");\n      }\n      Object.defineProperty(this, \"visitor\", {\n        value: visitor,\n        writable: false,\n        enumerable: true,\n        configurable: false\n      });\n      this.currentPath = path;\n      this.needToCallTraverse = true;\n      Object.seal(this);\n    }\n    if (!(visitor instanceof PathVisitor)) {\n      throw new Error(\"\");\n    }\n    var Cp = Context.prototype = Object.create(visitor);\n    Cp.constructor = Context;\n    extend(Cp, sharedContextProtoMethods);\n    return Context;\n  }\n  var sharedContextProtoMethods = /* @__PURE__ */ Object.create(null);\n  sharedContextProtoMethods.reset = function reset(path) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.currentPath = path;\n    this.needToCallTraverse = true;\n    return this;\n  };\n  sharedContextProtoMethods.invokeVisitorMethod = function invokeVisitorMethod(methodName) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    var result = this.visitor[methodName].call(this, this.currentPath);\n    if (result === false) {\n      this.needToCallTraverse = false;\n    } else if (result !== undefined$1) {\n      this.currentPath = this.currentPath.replace(result)[0];\n      if (this.needToCallTraverse) {\n        this.traverse(this.currentPath);\n      }\n    }\n    if (this.needToCallTraverse !== false) {\n      throw new Error(\n        \"Must either call this.traverse or return false in \" + methodName\n      );\n    }\n    var path = this.currentPath;\n    return path && path.value;\n  };\n  sharedContextProtoMethods.traverse = function traverse(path, newVisitor) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.needToCallTraverse = false;\n    return visitChildren(path, PathVisitor.fromMethodsObject(\n      newVisitor || this.visitor\n    ));\n  };\n  sharedContextProtoMethods.visit = function visit(path, newVisitor) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.needToCallTraverse = false;\n    return PathVisitor.fromMethodsObject(\n      newVisitor || this.visitor\n    ).visitWithoutReset(path);\n  };\n  sharedContextProtoMethods.reportChanged = function reportChanged() {\n    this.visitor.reportChanged();\n  };\n  sharedContextProtoMethods.abort = function abort() {\n    this.needToCallTraverse = false;\n    this.visitor.abort();\n  };\n  return PathVisitor;\n}\nmaybeSetModuleExports(() => module);\n\nfunction equivPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var getFieldNames = types.getFieldNames;\n  var getFieldValue = types.getFieldValue;\n  var isArray = types.builtInTypes.array;\n  var isObject = types.builtInTypes.object;\n  var isDate = types.builtInTypes.Date;\n  var isRegExp = types.builtInTypes.RegExp;\n  var hasOwn = Object.prototype.hasOwnProperty;\n  function astNodesAreEquivalent(a, b, problemPath) {\n    if (isArray.check(problemPath)) {\n      problemPath.length = 0;\n    } else {\n      problemPath = null;\n    }\n    return areEquivalent(a, b, problemPath);\n  }\n  astNodesAreEquivalent.assert = function(a, b) {\n    var problemPath = [];\n    if (!astNodesAreEquivalent(a, b, problemPath)) {\n      if (problemPath.length === 0) {\n        if (a !== b) {\n          throw new Error(\"Nodes must be equal\");\n        }\n      } else {\n        throw new Error(\n          \"Nodes differ in the following path: \" + problemPath.map(subscriptForProperty).join(\"\")\n        );\n      }\n    }\n  };\n  function subscriptForProperty(property) {\n    if (/[_$a-z][_$a-z0-9]*/i.test(property)) {\n      return \".\" + property;\n    }\n    return \"[\" + JSON.stringify(property) + \"]\";\n  }\n  function areEquivalent(a, b, problemPath) {\n    if (a === b) {\n      return true;\n    }\n    if (isArray.check(a)) {\n      return arraysAreEquivalent(a, b, problemPath);\n    }\n    if (isObject.check(a)) {\n      return objectsAreEquivalent(a, b, problemPath);\n    }\n    if (isDate.check(a)) {\n      return isDate.check(b) && +a === +b;\n    }\n    if (isRegExp.check(a)) {\n      return isRegExp.check(b) && (a.source === b.source && a.global === b.global && a.multiline === b.multiline && a.ignoreCase === b.ignoreCase);\n    }\n    return a == b;\n  }\n  function arraysAreEquivalent(a, b, problemPath) {\n    isArray.assert(a);\n    var aLength = a.length;\n    if (!isArray.check(b) || b.length !== aLength) {\n      if (problemPath) {\n        problemPath.push(\"length\");\n      }\n      return false;\n    }\n    for (var i = 0; i < aLength; ++i) {\n      if (problemPath) {\n        problemPath.push(i);\n      }\n      if (i in a !== i in b) {\n        return false;\n      }\n      if (!areEquivalent(a[i], b[i], problemPath)) {\n        return false;\n      }\n      if (problemPath) {\n        var problemPathTail = problemPath.pop();\n        if (problemPathTail !== i) {\n          throw new Error(\"\" + problemPathTail);\n        }\n      }\n    }\n    return true;\n  }\n  function objectsAreEquivalent(a, b, problemPath) {\n    isObject.assert(a);\n    if (!isObject.check(b)) {\n      return false;\n    }\n    if (a.type !== b.type) {\n      if (problemPath) {\n        problemPath.push(\"type\");\n      }\n      return false;\n    }\n    var aNames = getFieldNames(a);\n    var aNameCount = aNames.length;\n    var bNames = getFieldNames(b);\n    var bNameCount = bNames.length;\n    if (aNameCount === bNameCount) {\n      for (var i = 0; i < aNameCount; ++i) {\n        var name = aNames[i];\n        var aChild = getFieldValue(a, name);\n        var bChild = getFieldValue(b, name);\n        if (problemPath) {\n          problemPath.push(name);\n        }\n        if (!areEquivalent(aChild, bChild, problemPath)) {\n          return false;\n        }\n        if (problemPath) {\n          var problemPathTail = problemPath.pop();\n          if (problemPathTail !== name) {\n            throw new Error(\"\" + problemPathTail);\n          }\n        }\n      }\n      return true;\n    }\n    if (!problemPath) {\n      return false;\n    }\n    var seenNames = /* @__PURE__ */ Object.create(null);\n    for (i = 0; i < aNameCount; ++i) {\n      seenNames[aNames[i]] = true;\n    }\n    for (i = 0; i < bNameCount; ++i) {\n      name = bNames[i];\n      if (!hasOwn.call(seenNames, name)) {\n        problemPath.push(name);\n        return false;\n      }\n      delete seenNames[name];\n    }\n    for (name in seenNames) {\n      problemPath.push(name);\n      break;\n    }\n    return false;\n  }\n  return astNodesAreEquivalent;\n}\nmaybeSetModuleExports(() => module);\n\nfunction fork(plugins) {\n  const fork = createFork();\n  const types = fork.use(typesPlugin);\n  plugins.forEach(fork.use);\n  types.finalize();\n  const PathVisitor = fork.use(pathVisitorPlugin);\n  return {\n    Type: types.Type,\n    builtInTypes: types.builtInTypes,\n    namedTypes: types.namedTypes,\n    khulnasofts: types.khulnasofts,\n    defineMethod: types.defineMethod,\n    getFieldNames: types.getFieldNames,\n    getFieldValue: types.getFieldValue,\n    eachField: types.eachField,\n    someField: types.someField,\n    getSupertypeNames: types.getSupertypeNames,\n    getKhulnasoftName: types.getKhulnasoftName,\n    astNodesAreEquivalent: fork.use(equivPlugin),\n    finalize: types.finalize,\n    Path: fork.use(pathPlugin),\n    NodePath: fork.use(nodePathPlugin),\n    PathVisitor,\n    use: fork.use,\n    visit: PathVisitor.visit\n  };\n}\nfunction createFork() {\n  const used = [];\n  const usedResult = [];\n  function use(plugin) {\n    var idx = used.indexOf(plugin);\n    if (idx === -1) {\n      idx = used.length;\n      used.push(plugin);\n      usedResult[idx] = plugin(fork);\n    }\n    return usedResult[idx];\n  }\n  var fork = { use };\n  return fork;\n}\nmaybeSetModuleExports(() => module);\n\nfunction coreOpsDef() {\n  return {\n    BinaryOperators: [\n      \"==\",\n      \"!=\",\n      \"===\",\n      \"!==\",\n      \"<\",\n      \"<=\",\n      \">\",\n      \">=\",\n      \"<<\",\n      \">>\",\n      \">>>\",\n      \"+\",\n      \"-\",\n      \"*\",\n      \"/\",\n      \"%\",\n      \"&\",\n      \"|\",\n      \"^\",\n      \"in\",\n      \"instanceof\"\n    ],\n    AssignmentOperators: [\n      \"=\",\n      \"+=\",\n      \"-=\",\n      \"*=\",\n      \"/=\",\n      \"%=\",\n      \"<<=\",\n      \">>=\",\n      \">>>=\",\n      \"|=\",\n      \"^=\",\n      \"&=\"\n    ],\n    LogicalOperators: [\n      \"||\",\n      \"&&\"\n    ]\n  };\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2016OpsDef(fork) {\n  const result = fork.use(coreOpsDef);\n  if (result.BinaryOperators.indexOf(\"**\") < 0) {\n    result.BinaryOperators.push(\"**\");\n  }\n  if (result.AssignmentOperators.indexOf(\"**=\") < 0) {\n    result.AssignmentOperators.push(\"**=\");\n  }\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2020OpsDef(fork) {\n  const result = fork.use(es2016OpsDef);\n  if (result.LogicalOperators.indexOf(\"??\") < 0) {\n    result.LogicalOperators.push(\"??\");\n  }\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2021OpsDef(fork) {\n  const result = fork.use(es2020OpsDef);\n  result.LogicalOperators.forEach((op) => {\n    const assignOp = op + \"=\";\n    if (result.AssignmentOperators.indexOf(assignOp) < 0) {\n      result.AssignmentOperators.push(assignOp);\n    }\n  });\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction coreDef(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var def = Type.def;\n  var or = Type.or;\n  var shared = fork.use(sharedPlugin);\n  var defaults = shared.defaults;\n  var geq = shared.geq;\n  const {\n    BinaryOperators,\n    AssignmentOperators,\n    LogicalOperators\n  } = fork.use(coreOpsDef);\n  def(\"Printable\").field(\"loc\", or(\n    def(\"SourceLocation\"),\n    null\n  ), defaults[\"null\"], true);\n  def(\"Node\").bases(\"Printable\").field(\"type\", String).field(\"comments\", or(\n    [def(\"Comment\")],\n    null\n  ), defaults[\"null\"], true);\n  def(\"SourceLocation\").field(\"start\", def(\"Position\")).field(\"end\", def(\"Position\")).field(\"source\", or(String, null), defaults[\"null\"]);\n  def(\"Position\").field(\"line\", geq(1)).field(\"column\", geq(0));\n  def(\"File\").bases(\"Node\").build(\"program\", \"name\").field(\"program\", def(\"Program\")).field(\"name\", or(String, null), defaults[\"null\"]);\n  def(\"Program\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"Function\").bases(\"Node\").field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"params\", [def(\"Pattern\")]).field(\"body\", def(\"BlockStatement\")).field(\"generator\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]);\n  def(\"Statement\").bases(\"Node\");\n  def(\"EmptyStatement\").bases(\"Statement\").build();\n  def(\"BlockStatement\").bases(\"Statement\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"ExpressionStatement\").bases(\"Statement\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"IfStatement\").bases(\"Statement\").build(\"test\", \"consequent\", \"alternate\").field(\"test\", def(\"Expression\")).field(\"consequent\", def(\"Statement\")).field(\"alternate\", or(def(\"Statement\"), null), defaults[\"null\"]);\n  def(\"LabeledStatement\").bases(\"Statement\").build(\"label\", \"body\").field(\"label\", def(\"Identifier\")).field(\"body\", def(\"Statement\"));\n  def(\"BreakStatement\").bases(\"Statement\").build(\"label\").field(\"label\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"ContinueStatement\").bases(\"Statement\").build(\"label\").field(\"label\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"WithStatement\").bases(\"Statement\").build(\"object\", \"body\").field(\"object\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"SwitchStatement\").bases(\"Statement\").build(\"discriminant\", \"cases\", \"lexical\").field(\"discriminant\", def(\"Expression\")).field(\"cases\", [def(\"SwitchCase\")]).field(\"lexical\", Boolean, defaults[\"false\"]);\n  def(\"ReturnStatement\").bases(\"Statement\").build(\"argument\").field(\"argument\", or(def(\"Expression\"), null));\n  def(\"ThrowStatement\").bases(\"Statement\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"TryStatement\").bases(\"Statement\").build(\"block\", \"handler\", \"finalizer\").field(\"block\", def(\"BlockStatement\")).field(\"handler\", or(def(\"CatchClause\"), null), function() {\n    return this.handlers && this.handlers[0] || null;\n  }).field(\"handlers\", [def(\"CatchClause\")], function() {\n    return this.handler ? [this.handler] : [];\n  }, true).field(\"guardedHandlers\", [def(\"CatchClause\")], defaults.emptyArray).field(\"finalizer\", or(def(\"BlockStatement\"), null), defaults[\"null\"]);\n  def(\"CatchClause\").bases(\"Node\").build(\"param\", \"guard\", \"body\").field(\"param\", def(\"Pattern\")).field(\"guard\", or(def(\"Expression\"), null), defaults[\"null\"]).field(\"body\", def(\"BlockStatement\"));\n  def(\"WhileStatement\").bases(\"Statement\").build(\"test\", \"body\").field(\"test\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"DoWhileStatement\").bases(\"Statement\").build(\"body\", \"test\").field(\"body\", def(\"Statement\")).field(\"test\", def(\"Expression\"));\n  def(\"ForStatement\").bases(\"Statement\").build(\"init\", \"test\", \"update\", \"body\").field(\"init\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\"),\n    null\n  )).field(\"test\", or(def(\"Expression\"), null)).field(\"update\", or(def(\"Expression\"), null)).field(\"body\", def(\"Statement\"));\n  def(\"ForInStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"DebuggerStatement\").bases(\"Statement\").build();\n  def(\"Declaration\").bases(\"Statement\");\n  def(\"FunctionDeclaration\").bases(\"Function\", \"Declaration\").build(\"id\", \"params\", \"body\").field(\"id\", def(\"Identifier\"));\n  def(\"FunctionExpression\").bases(\"Function\", \"Expression\").build(\"id\", \"params\", \"body\");\n  def(\"VariableDeclaration\").bases(\"Declaration\").build(\"kind\", \"declarations\").field(\"kind\", or(\"var\", \"let\", \"const\")).field(\"declarations\", [def(\"VariableDeclarator\")]);\n  def(\"VariableDeclarator\").bases(\"Node\").build(\"id\", \"init\").field(\"id\", def(\"Pattern\")).field(\"init\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"Expression\").bases(\"Node\");\n  def(\"ThisExpression\").bases(\"Expression\").build();\n  def(\"ArrayExpression\").bases(\"Expression\").build(\"elements\").field(\"elements\", [or(def(\"Expression\"), null)]);\n  def(\"ObjectExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [def(\"Property\")]);\n  def(\"Property\").bases(\"Node\").build(\"kind\", \"key\", \"value\").field(\"kind\", or(\"init\", \"get\", \"set\")).field(\"key\", or(def(\"Literal\"), def(\"Identifier\"))).field(\"value\", def(\"Expression\"));\n  def(\"SequenceExpression\").bases(\"Expression\").build(\"expressions\").field(\"expressions\", [def(\"Expression\")]);\n  var UnaryOperator = or(\n    \"-\",\n    \"+\",\n    \"!\",\n    \"~\",\n    \"typeof\",\n    \"void\",\n    \"delete\"\n  );\n  def(\"UnaryExpression\").bases(\"Expression\").build(\"operator\", \"argument\", \"prefix\").field(\"operator\", UnaryOperator).field(\"argument\", def(\"Expression\")).field(\"prefix\", Boolean, defaults[\"true\"]);\n  const BinaryOperator = or(...BinaryOperators);\n  def(\"BinaryExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", BinaryOperator).field(\"left\", def(\"Expression\")).field(\"right\", def(\"Expression\"));\n  const AssignmentOperator = or(...AssignmentOperators);\n  def(\"AssignmentExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", AssignmentOperator).field(\"left\", or(def(\"Pattern\"), def(\"MemberExpression\"))).field(\"right\", def(\"Expression\"));\n  var UpdateOperator = or(\"++\", \"--\");\n  def(\"UpdateExpression\").bases(\"Expression\").build(\"operator\", \"argument\", \"prefix\").field(\"operator\", UpdateOperator).field(\"argument\", def(\"Expression\")).field(\"prefix\", Boolean);\n  var LogicalOperator = or(...LogicalOperators);\n  def(\"LogicalExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", LogicalOperator).field(\"left\", def(\"Expression\")).field(\"right\", def(\"Expression\"));\n  def(\"ConditionalExpression\").bases(\"Expression\").build(\"test\", \"consequent\", \"alternate\").field(\"test\", def(\"Expression\")).field(\"consequent\", def(\"Expression\")).field(\"alternate\", def(\"Expression\"));\n  def(\"NewExpression\").bases(\"Expression\").build(\"callee\", \"arguments\").field(\"callee\", def(\"Expression\")).field(\"arguments\", [def(\"Expression\")]);\n  def(\"CallExpression\").bases(\"Expression\").build(\"callee\", \"arguments\").field(\"callee\", def(\"Expression\")).field(\"arguments\", [def(\"Expression\")]);\n  def(\"MemberExpression\").bases(\"Expression\").build(\"object\", \"property\", \"computed\").field(\"object\", def(\"Expression\")).field(\"property\", or(def(\"Identifier\"), def(\"Expression\"))).field(\"computed\", Boolean, function() {\n    var type = this.property.type;\n    if (type === \"Literal\" || type === \"MemberExpression\" || type === \"BinaryExpression\") {\n      return true;\n    }\n    return false;\n  });\n  def(\"Pattern\").bases(\"Node\");\n  def(\"SwitchCase\").bases(\"Node\").build(\"test\", \"consequent\").field(\"test\", or(def(\"Expression\"), null)).field(\"consequent\", [def(\"Statement\")]);\n  def(\"Identifier\").bases(\"Expression\", \"Pattern\").build(\"name\").field(\"name\", String).field(\"optional\", Boolean, defaults[\"false\"]);\n  def(\"Literal\").bases(\"Expression\").build(\"value\").field(\"value\", or(String, Boolean, null, Number, RegExp, BigInt));\n  def(\"Comment\").bases(\"Printable\").field(\"value\", String).field(\"leading\", Boolean, defaults[\"true\"]).field(\"trailing\", Boolean, defaults[\"false\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es6Def(fork) {\n  fork.use(coreDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Function\").field(\"generator\", Boolean, defaults[\"false\"]).field(\"expression\", Boolean, defaults[\"false\"]).field(\"defaults\", [or(def(\"Expression\"), null)], defaults.emptyArray).field(\"rest\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"RestElement\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\")).field(\n    \"typeAnnotation\",\n    // for Babylon. Flow parser puts it on the identifier\n    or(def(\"TypeAnnotation\"), def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"SpreadElementPattern\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\"));\n  def(\"FunctionDeclaration\").build(\"id\", \"params\", \"body\", \"generator\", \"expression\").field(\"id\", or(def(\"Identifier\"), null));\n  def(\"FunctionExpression\").build(\"id\", \"params\", \"body\", \"generator\", \"expression\");\n  def(\"ArrowFunctionExpression\").bases(\"Function\", \"Expression\").build(\"params\", \"body\", \"expression\").field(\"id\", null, defaults[\"null\"]).field(\"body\", or(def(\"BlockStatement\"), def(\"Expression\"))).field(\"generator\", false, defaults[\"false\"]);\n  def(\"ForOfStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Pattern\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"YieldExpression\").bases(\"Expression\").build(\"argument\", \"delegate\").field(\"argument\", or(def(\"Expression\"), null)).field(\"delegate\", Boolean, defaults[\"false\"]);\n  def(\"GeneratorExpression\").bases(\"Expression\").build(\"body\", \"blocks\", \"filter\").field(\"body\", def(\"Expression\")).field(\"blocks\", [def(\"ComprehensionBlock\")]).field(\"filter\", or(def(\"Expression\"), null));\n  def(\"ComprehensionExpression\").bases(\"Expression\").build(\"body\", \"blocks\", \"filter\").field(\"body\", def(\"Expression\")).field(\"blocks\", [def(\"ComprehensionBlock\")]).field(\"filter\", or(def(\"Expression\"), null));\n  def(\"ComprehensionBlock\").bases(\"Node\").build(\"left\", \"right\", \"each\").field(\"left\", def(\"Pattern\")).field(\"right\", def(\"Expression\")).field(\"each\", Boolean);\n  def(\"Property\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"value\", or(def(\"Expression\"), def(\"Pattern\"))).field(\"method\", Boolean, defaults[\"false\"]).field(\"shorthand\", Boolean, defaults[\"false\"]).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ObjectProperty\").field(\"shorthand\", Boolean, defaults[\"false\"]);\n  def(\"PropertyPattern\").bases(\"Pattern\").build(\"key\", \"pattern\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"pattern\", def(\"Pattern\")).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ObjectPattern\").bases(\"Pattern\").build(\"properties\").field(\"properties\", [or(def(\"PropertyPattern\"), def(\"Property\"))]);\n  def(\"ArrayPattern\").bases(\"Pattern\").build(\"elements\").field(\"elements\", [or(def(\"Pattern\"), null)]);\n  def(\"SpreadElement\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ArrayExpression\").field(\"elements\", [or(\n    def(\"Expression\"),\n    def(\"SpreadElement\"),\n    def(\"RestElement\"),\n    null\n  )]);\n  def(\"NewExpression\").field(\"arguments\", [or(def(\"Expression\"), def(\"SpreadElement\"))]);\n  def(\"CallExpression\").field(\"arguments\", [or(def(\"Expression\"), def(\"SpreadElement\"))]);\n  def(\"AssignmentPattern\").bases(\"Pattern\").build(\"left\", \"right\").field(\"left\", def(\"Pattern\")).field(\"right\", def(\"Expression\"));\n  def(\"MethodDefinition\").bases(\"Declaration\").build(\"kind\", \"key\", \"value\", \"static\").field(\"kind\", or(\"constructor\", \"method\", \"get\", \"set\")).field(\"key\", def(\"Expression\")).field(\"value\", def(\"Function\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"static\", Boolean, defaults[\"false\"]);\n  const ClassBodyElement = or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"StaticBlock\")\n  );\n  def(\"ClassProperty\").bases(\"Declaration\").build(\"key\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ClassPropertyDefinition\").bases(\"Declaration\").build(\"definition\").field(\"definition\", ClassBodyElement);\n  def(\"ClassBody\").bases(\"Declaration\").build(\"body\").field(\"body\", [ClassBodyElement]);\n  def(\"ClassDeclaration\").bases(\"Declaration\").build(\"id\", \"body\", \"superClass\").field(\"id\", or(def(\"Identifier\"), null)).field(\"body\", def(\"ClassBody\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"ClassExpression\").bases(\"Expression\").build(\"id\", \"body\", \"superClass\").field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"body\", def(\"ClassBody\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"Super\").bases(\"Expression\").build();\n  def(\"Specifier\").bases(\"Node\");\n  def(\"ModuleSpecifier\").bases(\"Specifier\").field(\"local\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"name\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"ImportSpecifier\").bases(\"ModuleSpecifier\").build(\"imported\", \"local\").field(\"imported\", def(\"Identifier\"));\n  def(\"ImportDefaultSpecifier\").bases(\"ModuleSpecifier\").build(\"local\");\n  def(\"ImportNamespaceSpecifier\").bases(\"ModuleSpecifier\").build(\"local\");\n  def(\"ImportDeclaration\").bases(\"Declaration\").build(\"specifiers\", \"source\", \"importKind\").field(\"specifiers\", [or(\n    def(\"ImportSpecifier\"),\n    def(\"ImportNamespaceSpecifier\"),\n    def(\"ImportDefaultSpecifier\")\n  )], defaults.emptyArray).field(\"source\", def(\"Literal\")).field(\"importKind\", or(\n    \"value\",\n    \"type\"\n  ), function() {\n    return \"value\";\n  });\n  def(\"ExportNamedDeclaration\").bases(\"Declaration\").build(\"declaration\", \"specifiers\", \"source\").field(\"declaration\", or(def(\"Declaration\"), null)).field(\"specifiers\", [def(\"ExportSpecifier\")], defaults.emptyArray).field(\"source\", or(def(\"Literal\"), null), defaults[\"null\"]);\n  def(\"ExportSpecifier\").bases(\"ModuleSpecifier\").build(\"local\", \"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"ExportDefaultDeclaration\").bases(\"Declaration\").build(\"declaration\").field(\"declaration\", or(def(\"Declaration\"), def(\"Expression\")));\n  def(\"ExportAllDeclaration\").bases(\"Declaration\").build(\"source\").field(\"source\", def(\"Literal\"));\n  def(\"TaggedTemplateExpression\").bases(\"Expression\").build(\"tag\", \"quasi\").field(\"tag\", def(\"Expression\")).field(\"quasi\", def(\"TemplateLiteral\"));\n  def(\"TemplateLiteral\").bases(\"Expression\").build(\"quasis\", \"expressions\").field(\"quasis\", [def(\"TemplateElement\")]).field(\"expressions\", [def(\"Expression\")]);\n  def(\"TemplateElement\").bases(\"Node\").build(\"value\", \"tail\").field(\"value\", { \"cooked\": String, \"raw\": String }).field(\"tail\", Boolean);\n  def(\"MetaProperty\").bases(\"Expression\").build(\"meta\", \"property\").field(\"meta\", def(\"Identifier\")).field(\"property\", def(\"Identifier\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2016Def(fork) {\n  fork.use(es2016OpsDef);\n  fork.use(es6Def);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2017Def(fork) {\n  fork.use(es2016Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Function\").field(\"async\", Boolean, defaults[\"false\"]);\n  def(\"AwaitExpression\").bases(\"Expression\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2018Def(fork) {\n  fork.use(es2017Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"ForOfStatement\").field(\"await\", Boolean, defaults[\"false\"]);\n  def(\"SpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ObjectExpression\").field(\"properties\", [or(\n    def(\"Property\"),\n    def(\"SpreadProperty\"),\n    // Legacy\n    def(\"SpreadElement\")\n  )]);\n  def(\"TemplateElement\").field(\"value\", { \"cooked\": or(String, null), \"raw\": String });\n  def(\"SpreadPropertyPattern\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\"));\n  def(\"ObjectPattern\").field(\"properties\", [or(def(\"PropertyPattern\"), def(\"Property\"), def(\"RestElement\"), def(\"SpreadPropertyPattern\"))]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2019Def(fork) {\n  fork.use(es2018Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"CatchClause\").field(\"param\", or(def(\"Pattern\"), null), defaults[\"null\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2020Def(fork) {\n  fork.use(es2020OpsDef);\n  fork.use(es2019Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const shared = fork.use(sharedPlugin);\n  const defaults = shared.defaults;\n  def(\"ImportExpression\").bases(\"Expression\").build(\"source\").field(\"source\", def(\"Expression\"));\n  def(\"ExportAllDeclaration\").bases(\"Declaration\").build(\"source\", \"exported\").field(\"source\", def(\"Literal\")).field(\"exported\", or(\n    def(\"Identifier\"),\n    null,\n    void 0\n  ), defaults[\"null\"]);\n  def(\"ChainElement\").bases(\"Node\").field(\"optional\", Boolean, defaults[\"false\"]);\n  def(\"CallExpression\").bases(\"Expression\", \"ChainElement\");\n  def(\"MemberExpression\").bases(\"Expression\", \"ChainElement\");\n  def(\"ChainExpression\").bases(\"Expression\").build(\"expression\").field(\"expression\", def(\"ChainElement\"));\n  def(\"OptionalCallExpression\").bases(\"CallExpression\").build(\"callee\", \"arguments\", \"optional\").field(\"optional\", Boolean, defaults[\"true\"]);\n  def(\"OptionalMemberExpression\").bases(\"MemberExpression\").build(\"object\", \"property\", \"computed\", \"optional\").field(\"optional\", Boolean, defaults[\"true\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2021Def(fork) {\n  fork.use(es2021OpsDef);\n  fork.use(es2020Def);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2022Def(fork) {\n  fork.use(es2021Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  def(\"StaticBlock\").bases(\"Declaration\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction esProposalsDef(fork) {\n  fork.use(es2022Def);\n  const types = fork.use(typesPlugin);\n  const Type = types.Type;\n  const def = types.Type.def;\n  const or = Type.or;\n  const shared = fork.use(sharedPlugin);\n  const defaults = shared.defaults;\n  def(\"AwaitExpression\").build(\"argument\", \"all\").field(\"argument\", or(def(\"Expression\"), null)).field(\"all\", Boolean, defaults[\"false\"]);\n  def(\"Decorator\").bases(\"Node\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"Property\").field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"MethodDefinition\").field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"PrivateName\").bases(\"Expression\", \"Pattern\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"ClassPrivateProperty\").bases(\"ClassProperty\").build(\"key\", \"value\").field(\"key\", def(\"PrivateName\")).field(\"value\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"ImportAttribute\").bases(\"Node\").build(\"key\", \"value\").field(\"key\", or(def(\"Identifier\"), def(\"Literal\"))).field(\"value\", def(\"Expression\"));\n  [\n    \"ImportDeclaration\",\n    \"ExportAllDeclaration\",\n    \"ExportNamedDeclaration\"\n  ].forEach((decl) => {\n    def(decl).field(\n      \"assertions\",\n      [def(\"ImportAttribute\")],\n      defaults.emptyArray\n    );\n  });\n  def(\"RecordExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [or(\n    def(\"ObjectProperty\"),\n    def(\"ObjectMethod\"),\n    def(\"SpreadElement\")\n  )]);\n  def(\"TupleExpression\").bases(\"Expression\").build(\"elements\").field(\"elements\", [or(\n    def(\"Expression\"),\n    def(\"SpreadElement\"),\n    null\n  )]);\n  def(\"ModuleExpression\").bases(\"Node\").build(\"body\").field(\"body\", def(\"Program\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction jsxDef(fork) {\n  fork.use(esProposalsDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"JSXAttribute\").bases(\"Node\").build(\"name\", \"value\").field(\"name\", or(def(\"JSXIdentifier\"), def(\"JSXNamespacedName\"))).field(\"value\", or(\n    def(\"Literal\"),\n    // attr=\"value\"\n    def(\"JSXExpressionContainer\"),\n    // attr={value}\n    def(\"JSXElement\"),\n    // attr=<div />\n    def(\"JSXFragment\"),\n    // attr=<></>\n    null\n    // attr= or just attr\n  ), defaults[\"null\"]);\n  def(\"JSXIdentifier\").bases(\"Identifier\").build(\"name\").field(\"name\", String);\n  def(\"JSXNamespacedName\").bases(\"Node\").build(\"namespace\", \"name\").field(\"namespace\", def(\"JSXIdentifier\")).field(\"name\", def(\"JSXIdentifier\"));\n  def(\"JSXMemberExpression\").bases(\"MemberExpression\").build(\"object\", \"property\").field(\"object\", or(def(\"JSXIdentifier\"), def(\"JSXMemberExpression\"))).field(\"property\", def(\"JSXIdentifier\")).field(\"computed\", Boolean, defaults.false);\n  const JSXElementName = or(\n    def(\"JSXIdentifier\"),\n    def(\"JSXNamespacedName\"),\n    def(\"JSXMemberExpression\")\n  );\n  def(\"JSXSpreadAttribute\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  const JSXAttributes = [or(\n    def(\"JSXAttribute\"),\n    def(\"JSXSpreadAttribute\")\n  )];\n  def(\"JSXExpressionContainer\").bases(\"Expression\").build(\"expression\").field(\"expression\", or(def(\"Expression\"), def(\"JSXEmptyExpression\")));\n  const JSXChildren = [or(\n    def(\"JSXText\"),\n    def(\"JSXExpressionContainer\"),\n    def(\"JSXSpreadChild\"),\n    def(\"JSXElement\"),\n    def(\"JSXFragment\"),\n    def(\"Literal\")\n    // Legacy: Esprima should return JSXText instead.\n  )];\n  def(\"JSXElement\").bases(\"Expression\").build(\"openingElement\", \"closingElement\", \"children\").field(\"openingElement\", def(\"JSXOpeningElement\")).field(\"closingElement\", or(def(\"JSXClosingElement\"), null), defaults[\"null\"]).field(\"children\", JSXChildren, defaults.emptyArray).field(\"name\", JSXElementName, function() {\n    return this.openingElement.name;\n  }, true).field(\"selfClosing\", Boolean, function() {\n    return this.openingElement.selfClosing;\n  }, true).field(\"attributes\", JSXAttributes, function() {\n    return this.openingElement.attributes;\n  }, true);\n  def(\"JSXOpeningElement\").bases(\"Node\").build(\"name\", \"attributes\", \"selfClosing\").field(\"name\", JSXElementName).field(\"attributes\", JSXAttributes, defaults.emptyArray).field(\"selfClosing\", Boolean, defaults[\"false\"]);\n  def(\"JSXClosingElement\").bases(\"Node\").build(\"name\").field(\"name\", JSXElementName);\n  def(\"JSXFragment\").bases(\"Expression\").build(\"openingFragment\", \"closingFragment\", \"children\").field(\"openingFragment\", def(\"JSXOpeningFragment\")).field(\"closingFragment\", def(\"JSXClosingFragment\")).field(\"children\", JSXChildren, defaults.emptyArray);\n  def(\"JSXOpeningFragment\").bases(\"Node\").build();\n  def(\"JSXClosingFragment\").bases(\"Node\").build();\n  def(\"JSXText\").bases(\"Literal\").build(\"value\", \"raw\").field(\"value\", String).field(\"raw\", String, function() {\n    return this.value;\n  });\n  def(\"JSXEmptyExpression\").bases(\"Node\").build();\n  def(\"JSXSpreadChild\").bases(\"Node\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction typeAnnotationsDef(fork) {\n  var types = fork.use(typesPlugin);\n  var def = types.Type.def;\n  var or = types.Type.or;\n  var defaults = fork.use(sharedPlugin).defaults;\n  var TypeAnnotation = or(\n    def(\"TypeAnnotation\"),\n    def(\"TSTypeAnnotation\"),\n    null\n  );\n  var TypeParamDecl = or(\n    def(\"TypeParameterDeclaration\"),\n    def(\"TSTypeParameterDeclaration\"),\n    null\n  );\n  def(\"Identifier\").field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  def(\"ObjectPattern\").field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  def(\"Function\").field(\"returnType\", TypeAnnotation, defaults[\"null\"]).field(\"typeParameters\", TypeParamDecl, defaults[\"null\"]);\n  def(\"ClassProperty\").build(\"key\", \"value\", \"typeAnnotation\", \"static\").field(\"value\", or(def(\"Expression\"), null)).field(\"static\", Boolean, defaults[\"false\"]).field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  [\n    \"ClassDeclaration\",\n    \"ClassExpression\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"typeParameters\", TypeParamDecl, defaults[\"null\"]).field(\n      \"superTypeParameters\",\n      or(\n        def(\"TypeParameterInstantiation\"),\n        def(\"TSTypeParameterInstantiation\"),\n        null\n      ),\n      defaults[\"null\"]\n    ).field(\n      \"implements\",\n      or(\n        [def(\"ClassImplements\")],\n        [def(\"TSExpressionWithTypeArguments\")]\n      ),\n      defaults.emptyArray\n    );\n  });\n}\nmaybeSetModuleExports(() => module);\n\nfunction flowDef(fork) {\n  fork.use(esProposalsDef);\n  fork.use(typeAnnotationsDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Flow\").bases(\"Node\");\n  def(\"FlowType\").bases(\"Flow\");\n  def(\"AnyTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"EmptyTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"MixedTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"VoidTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"SymbolTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NumberTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"BigIntTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NumberLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Number).field(\"raw\", String);\n  def(\"NumericLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Number).field(\"raw\", String);\n  def(\"BigIntLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", null).field(\"raw\", String);\n  def(\"StringTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"StringLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", String).field(\"raw\", String);\n  def(\"BooleanTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"BooleanLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Boolean).field(\"raw\", String);\n  def(\"TypeAnnotation\").bases(\"Node\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"FlowType\"));\n  def(\"NullableTypeAnnotation\").bases(\"FlowType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"FlowType\"));\n  def(\"NullLiteralTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NullTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ThisTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ExistsTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ExistentialTypeParam\").bases(\"FlowType\").build();\n  def(\"FunctionTypeAnnotation\").bases(\"FlowType\").build(\"params\", \"returnType\", \"rest\", \"typeParameters\").field(\"params\", [def(\"FunctionTypeParam\")]).field(\"returnType\", def(\"FlowType\")).field(\"rest\", or(def(\"FunctionTypeParam\"), null)).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null));\n  def(\"FunctionTypeParam\").bases(\"Node\").build(\"name\", \"typeAnnotation\", \"optional\").field(\"name\", or(def(\"Identifier\"), null)).field(\"typeAnnotation\", def(\"FlowType\")).field(\"optional\", Boolean);\n  def(\"ArrayTypeAnnotation\").bases(\"FlowType\").build(\"elementType\").field(\"elementType\", def(\"FlowType\"));\n  def(\"ObjectTypeAnnotation\").bases(\"FlowType\").build(\"properties\", \"indexers\", \"callProperties\").field(\"properties\", [\n    or(\n      def(\"ObjectTypeProperty\"),\n      def(\"ObjectTypeSpreadProperty\")\n    )\n  ]).field(\"indexers\", [def(\"ObjectTypeIndexer\")], defaults.emptyArray).field(\n    \"callProperties\",\n    [def(\"ObjectTypeCallProperty\")],\n    defaults.emptyArray\n  ).field(\"inexact\", or(Boolean, void 0), defaults[\"undefined\"]).field(\"exact\", Boolean, defaults[\"false\"]).field(\"internalSlots\", [def(\"ObjectTypeInternalSlot\")], defaults.emptyArray);\n  def(\"Variance\").bases(\"Node\").build(\"kind\").field(\"kind\", or(\"plus\", \"minus\"));\n  const LegacyVariance = or(\n    def(\"Variance\"),\n    \"plus\",\n    \"minus\",\n    null\n  );\n  def(\"ObjectTypeProperty\").bases(\"Node\").build(\"key\", \"value\", \"optional\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"))).field(\"value\", def(\"FlowType\")).field(\"optional\", Boolean).field(\"variance\", LegacyVariance, defaults[\"null\"]);\n  def(\"ObjectTypeIndexer\").bases(\"Node\").build(\"id\", \"key\", \"value\").field(\"id\", def(\"Identifier\")).field(\"key\", def(\"FlowType\")).field(\"value\", def(\"FlowType\")).field(\"variance\", LegacyVariance, defaults[\"null\"]).field(\"static\", Boolean, defaults[\"false\"]);\n  def(\"ObjectTypeCallProperty\").bases(\"Node\").build(\"value\").field(\"value\", def(\"FunctionTypeAnnotation\")).field(\"static\", Boolean, defaults[\"false\"]);\n  def(\"QualifiedTypeIdentifier\").bases(\"Node\").build(\"qualification\", \"id\").field(\n    \"qualification\",\n    or(\n      def(\"Identifier\"),\n      def(\"QualifiedTypeIdentifier\")\n    )\n  ).field(\"id\", def(\"Identifier\"));\n  def(\"GenericTypeAnnotation\").bases(\"FlowType\").build(\"id\", \"typeParameters\").field(\"id\", or(def(\"Identifier\"), def(\"QualifiedTypeIdentifier\"))).field(\"typeParameters\", or(def(\"TypeParameterInstantiation\"), null));\n  def(\"MemberTypeAnnotation\").bases(\"FlowType\").build(\"object\", \"property\").field(\"object\", def(\"Identifier\")).field(\n    \"property\",\n    or(\n      def(\"MemberTypeAnnotation\"),\n      def(\"GenericTypeAnnotation\")\n    )\n  );\n  def(\"IndexedAccessType\").bases(\"FlowType\").build(\"objectType\", \"indexType\").field(\"objectType\", def(\"FlowType\")).field(\"indexType\", def(\"FlowType\"));\n  def(\"OptionalIndexedAccessType\").bases(\"FlowType\").build(\"objectType\", \"indexType\", \"optional\").field(\"objectType\", def(\"FlowType\")).field(\"indexType\", def(\"FlowType\")).field(\"optional\", Boolean);\n  def(\"UnionTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"IntersectionTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"TypeofTypeAnnotation\").bases(\"FlowType\").build(\"argument\").field(\"argument\", def(\"FlowType\"));\n  def(\"ObjectTypeSpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"FlowType\"));\n  def(\"ObjectTypeInternalSlot\").bases(\"Node\").build(\"id\", \"value\", \"optional\", \"static\", \"method\").field(\"id\", def(\"Identifier\")).field(\"value\", def(\"FlowType\")).field(\"optional\", Boolean).field(\"static\", Boolean).field(\"method\", Boolean);\n  def(\"TypeParameterDeclaration\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"TypeParameter\")]);\n  def(\"TypeParameterInstantiation\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"FlowType\")]);\n  def(\"TypeParameter\").bases(\"FlowType\").build(\"name\", \"variance\", \"bound\", \"default\").field(\"name\", String).field(\"variance\", LegacyVariance, defaults[\"null\"]).field(\"bound\", or(def(\"TypeAnnotation\"), null), defaults[\"null\"]).field(\"default\", or(def(\"FlowType\"), null), defaults[\"null\"]);\n  def(\"ClassProperty\").field(\"variance\", LegacyVariance, defaults[\"null\"]);\n  def(\"ClassImplements\").bases(\"Node\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"InterfaceTypeAnnotation\").bases(\"FlowType\").build(\"body\", \"extends\").field(\"body\", def(\"ObjectTypeAnnotation\")).field(\"extends\", or([def(\"InterfaceExtends\")], null), defaults[\"null\"]);\n  def(\"InterfaceDeclaration\").bases(\"Declaration\").build(\"id\", \"body\", \"extends\").field(\"id\", def(\"Identifier\")).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterDeclaration\"), null),\n    defaults[\"null\"]\n  ).field(\"body\", def(\"ObjectTypeAnnotation\")).field(\"extends\", [def(\"InterfaceExtends\")]);\n  def(\"DeclareInterface\").bases(\"InterfaceDeclaration\").build(\"id\", \"body\", \"extends\");\n  def(\"InterfaceExtends\").bases(\"Node\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TypeAlias\").bases(\"Declaration\").build(\"id\", \"typeParameters\", \"right\").field(\"id\", def(\"Identifier\")).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null)).field(\"right\", def(\"FlowType\"));\n  def(\"DeclareTypeAlias\").bases(\"TypeAlias\").build(\"id\", \"typeParameters\", \"right\");\n  def(\"OpaqueType\").bases(\"Declaration\").build(\"id\", \"typeParameters\", \"impltype\", \"supertype\").field(\"id\", def(\"Identifier\")).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null)).field(\"impltype\", def(\"FlowType\")).field(\"supertype\", or(def(\"FlowType\"), null));\n  def(\"DeclareOpaqueType\").bases(\"OpaqueType\").build(\"id\", \"typeParameters\", \"supertype\").field(\"impltype\", or(def(\"FlowType\"), null));\n  def(\"TypeCastExpression\").bases(\"Expression\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TypeAnnotation\"));\n  def(\"TupleTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"DeclareVariable\").bases(\"Statement\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"DeclareFunction\").bases(\"Statement\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\"predicate\", or(def(\"FlowPredicate\"), null), defaults[\"null\"]);\n  def(\"DeclareClass\").bases(\"InterfaceDeclaration\").build(\"id\");\n  def(\"DeclareModule\").bases(\"Statement\").build(\"id\", \"body\").field(\"id\", or(def(\"Identifier\"), def(\"Literal\"))).field(\"body\", def(\"BlockStatement\"));\n  def(\"DeclareModuleExports\").bases(\"Statement\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TypeAnnotation\"));\n  def(\"DeclareExportDeclaration\").bases(\"Declaration\").build(\"default\", \"declaration\", \"specifiers\", \"source\").field(\"default\", Boolean).field(\"declaration\", or(\n    def(\"DeclareVariable\"),\n    def(\"DeclareFunction\"),\n    def(\"DeclareClass\"),\n    def(\"FlowType\"),\n    // Implies default.\n    def(\"TypeAlias\"),\n    // Implies named type\n    def(\"DeclareOpaqueType\"),\n    // Implies named opaque type\n    def(\"InterfaceDeclaration\"),\n    null\n  )).field(\"specifiers\", [or(\n    def(\"ExportSpecifier\"),\n    def(\"ExportBatchSpecifier\")\n  )], defaults.emptyArray).field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"DeclareExportAllDeclaration\").bases(\"Declaration\").build(\"source\").field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"ImportDeclaration\").field(\"importKind\", or(\"value\", \"type\", \"typeof\"), () => \"value\");\n  def(\"FlowPredicate\").bases(\"Flow\");\n  def(\"InferredPredicate\").bases(\"FlowPredicate\").build();\n  def(\"DeclaredPredicate\").bases(\"FlowPredicate\").build(\"value\").field(\"value\", def(\"Expression\"));\n  def(\"Function\").field(\"predicate\", or(def(\"FlowPredicate\"), null), defaults[\"null\"]);\n  def(\"CallExpression\").field(\"typeArguments\", or(\n    null,\n    def(\"TypeParameterInstantiation\")\n  ), defaults[\"null\"]);\n  def(\"NewExpression\").field(\"typeArguments\", or(\n    null,\n    def(\"TypeParameterInstantiation\")\n  ), defaults[\"null\"]);\n  def(\"EnumDeclaration\").bases(\"Declaration\").build(\"id\", \"body\").field(\"id\", def(\"Identifier\")).field(\"body\", or(\n    def(\"EnumBooleanBody\"),\n    def(\"EnumNumberBody\"),\n    def(\"EnumStringBody\"),\n    def(\"EnumSymbolBody\")\n  ));\n  def(\"EnumBooleanBody\").build(\"members\", \"explicitType\").field(\"members\", [def(\"EnumBooleanMember\")]).field(\"explicitType\", Boolean);\n  def(\"EnumNumberBody\").build(\"members\", \"explicitType\").field(\"members\", [def(\"EnumNumberMember\")]).field(\"explicitType\", Boolean);\n  def(\"EnumStringBody\").build(\"members\", \"explicitType\").field(\"members\", or([def(\"EnumStringMember\")], [def(\"EnumDefaultedMember\")])).field(\"explicitType\", Boolean);\n  def(\"EnumSymbolBody\").build(\"members\").field(\"members\", [def(\"EnumDefaultedMember\")]);\n  def(\"EnumBooleanMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", or(def(\"Literal\"), Boolean));\n  def(\"EnumNumberMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", def(\"Literal\"));\n  def(\"EnumStringMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", def(\"Literal\"));\n  def(\"EnumDefaultedMember\").build(\"id\").field(\"id\", def(\"Identifier\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction esprimaDef(fork) {\n  fork.use(esProposalsDef);\n  var types = fork.use(typesPlugin);\n  var defaults = fork.use(sharedPlugin).defaults;\n  var def = types.Type.def;\n  var or = types.Type.or;\n  def(\"VariableDeclaration\").field(\"declarations\", [or(\n    def(\"VariableDeclarator\"),\n    def(\"Identifier\")\n    // Esprima deviation.\n  )]);\n  def(\"Property\").field(\"value\", or(\n    def(\"Expression\"),\n    def(\"Pattern\")\n    // Esprima deviation.\n  ));\n  def(\"ArrayPattern\").field(\"elements\", [or(\n    def(\"Pattern\"),\n    def(\"SpreadElement\"),\n    null\n  )]);\n  def(\"ObjectPattern\").field(\"properties\", [or(\n    def(\"Property\"),\n    def(\"PropertyPattern\"),\n    def(\"SpreadPropertyPattern\"),\n    def(\"SpreadProperty\")\n    // Used by Esprima.\n  )]);\n  def(\"ExportSpecifier\").bases(\"ModuleSpecifier\").build(\"id\", \"name\");\n  def(\"ExportBatchSpecifier\").bases(\"Specifier\").build();\n  def(\"ExportDeclaration\").bases(\"Declaration\").build(\"default\", \"declaration\", \"specifiers\", \"source\").field(\"default\", Boolean).field(\"declaration\", or(\n    def(\"Declaration\"),\n    def(\"Expression\"),\n    // Implies default.\n    null\n  )).field(\"specifiers\", [or(\n    def(\"ExportSpecifier\"),\n    def(\"ExportBatchSpecifier\")\n  )], defaults.emptyArray).field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"Block\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"Line\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n}\nmaybeSetModuleExports(() => module);\n\nfunction babelCoreDef(fork) {\n  fork.use(esProposalsDef);\n  const types = fork.use(typesPlugin);\n  const defaults = fork.use(sharedPlugin).defaults;\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const {\n    undefined: isUndefined\n  } = types.builtInTypes;\n  def(\"Noop\").bases(\"Statement\").build();\n  def(\"DoExpression\").bases(\"Expression\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"BindExpression\").bases(\"Expression\").build(\"object\", \"callee\").field(\"object\", or(def(\"Expression\"), null)).field(\"callee\", def(\"Expression\"));\n  def(\"ParenthesizedExpression\").bases(\"Expression\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"ExportNamespaceSpecifier\").bases(\"Specifier\").build(\"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"ExportDefaultSpecifier\").bases(\"Specifier\").build(\"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"CommentBlock\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"CommentLine\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"Directive\").bases(\"Node\").build(\"value\").field(\"value\", def(\"DirectiveLiteral\"));\n  def(\"DirectiveLiteral\").bases(\"Node\", \"Expression\").build(\"value\").field(\"value\", String, defaults[\"use strict\"]);\n  def(\"InterpreterDirective\").bases(\"Node\").build(\"value\").field(\"value\", String);\n  def(\"BlockStatement\").bases(\"Statement\").build(\"body\").field(\"body\", [def(\"Statement\")]).field(\"directives\", [def(\"Directive\")], defaults.emptyArray);\n  def(\"Program\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]).field(\"directives\", [def(\"Directive\")], defaults.emptyArray).field(\"interpreter\", or(def(\"InterpreterDirective\"), null), defaults[\"null\"]);\n  function makeLiteralExtra(rawValueType = String, toRaw) {\n    return [\n      \"extra\",\n      {\n        rawValue: rawValueType,\n        raw: String\n      },\n      function getDefault() {\n        const value = types.getFieldValue(this, \"value\");\n        return {\n          rawValue: value,\n          raw: toRaw ? toRaw(value) : String(value)\n        };\n      }\n    ];\n  }\n  def(\"StringLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", String).field(...makeLiteralExtra(String, (val) => JSON.stringify(val)));\n  def(\"NumericLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", Number).field(\"raw\", or(String, null), defaults[\"null\"]).field(...makeLiteralExtra(Number));\n  def(\"BigIntLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", or(String, Number)).field(...makeLiteralExtra(String, (val) => val + \"n\"));\n  def(\"DecimalLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", String).field(...makeLiteralExtra(String, (val) => val + \"m\"));\n  def(\"NullLiteral\").bases(\"Literal\").build().field(\"value\", null, defaults[\"null\"]);\n  def(\"BooleanLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", Boolean);\n  def(\"RegExpLiteral\").bases(\"Literal\").build(\"pattern\", \"flags\").field(\"pattern\", String).field(\"flags\", String).field(\"value\", RegExp, function() {\n    return new RegExp(this.pattern, this.flags);\n  }).field(...makeLiteralExtra(\n    or(RegExp, isUndefined),\n    (exp) => `/${exp.pattern}/${exp.flags || \"\"}`\n  )).field(\"regex\", {\n    pattern: String,\n    flags: String\n  }, function() {\n    return {\n      pattern: this.pattern,\n      flags: this.flags\n    };\n  });\n  var ObjectExpressionProperty = or(\n    def(\"Property\"),\n    def(\"ObjectMethod\"),\n    def(\"ObjectProperty\"),\n    def(\"SpreadProperty\"),\n    def(\"SpreadElement\")\n  );\n  def(\"ObjectExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [ObjectExpressionProperty]);\n  def(\"ObjectMethod\").bases(\"Node\", \"Function\").build(\"kind\", \"key\", \"params\", \"body\", \"computed\").field(\"kind\", or(\"method\", \"get\", \"set\")).field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"params\", [def(\"Pattern\")]).field(\"body\", def(\"BlockStatement\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]).field(\n    \"accessibility\",\n    // TypeScript\n    or(def(\"Literal\"), null),\n    defaults[\"null\"]\n  ).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"ObjectProperty\").bases(\"Node\").build(\"key\", \"value\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"value\", or(def(\"Expression\"), def(\"Pattern\"))).field(\n    \"accessibility\",\n    // TypeScript\n    or(def(\"Literal\"), null),\n    defaults[\"null\"]\n  ).field(\"computed\", Boolean, defaults[\"false\"]);\n  var ClassBodyElement = or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"ClassPrivateProperty\"),\n    def(\"ClassMethod\"),\n    def(\"ClassPrivateMethod\"),\n    def(\"ClassAccessorProperty\"),\n    def(\"StaticBlock\")\n  );\n  def(\"ClassBody\").bases(\"Declaration\").build(\"body\").field(\"body\", [ClassBodyElement]);\n  def(\"ClassMethod\").bases(\"Declaration\", \"Function\").build(\"kind\", \"key\", \"params\", \"body\", \"computed\", \"static\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\")));\n  def(\"ClassPrivateMethod\").bases(\"Declaration\", \"Function\").build(\"key\", \"params\", \"body\", \"kind\", \"computed\", \"static\").field(\"key\", def(\"PrivateName\"));\n  def(\"ClassAccessorProperty\").bases(\"Declaration\").build(\"key\", \"value\", \"decorators\", \"computed\", \"static\").field(\"key\", or(\n    def(\"Literal\"),\n    def(\"Identifier\"),\n    def(\"PrivateName\"),\n    // Only when .computed is true (TODO enforce this)\n    def(\"Expression\")\n  )).field(\"value\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  [\n    \"ClassMethod\",\n    \"ClassPrivateMethod\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"kind\", or(\"get\", \"set\", \"method\", \"constructor\"), () => \"method\").field(\"body\", def(\"BlockStatement\")).field(\"access\", or(\"public\", \"private\", \"protected\", null), defaults[\"null\"]);\n  });\n  [\n    \"ClassMethod\",\n    \"ClassPrivateMethod\",\n    \"ClassAccessorProperty\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"computed\", Boolean, defaults[\"false\"]).field(\"static\", Boolean, defaults[\"false\"]).field(\"abstract\", Boolean, defaults[\"false\"]).field(\"accessibility\", or(\"public\", \"private\", \"protected\", null), defaults[\"null\"]).field(\"decorators\", or([def(\"Decorator\")], null), defaults[\"null\"]).field(\"definite\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"override\", Boolean, defaults[\"false\"]).field(\"readonly\", Boolean, defaults[\"false\"]);\n  });\n  var ObjectPatternProperty = or(\n    def(\"Property\"),\n    def(\"PropertyPattern\"),\n    def(\"SpreadPropertyPattern\"),\n    def(\"SpreadProperty\"),\n    // Used by Esprima\n    def(\"ObjectProperty\"),\n    // Babel 6\n    def(\"RestProperty\"),\n    // Babel 6\n    def(\"RestElement\")\n    // Babel 6\n  );\n  def(\"ObjectPattern\").bases(\"Pattern\").build(\"properties\").field(\"properties\", [ObjectPatternProperty]).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"SpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"RestProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ForAwaitStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"Import\").bases(\"Expression\").build();\n}\nmaybeSetModuleExports(() => module);\n\nfunction babelDef(fork) {\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  fork.use(babelCoreDef);\n  fork.use(flowDef);\n  def(\"V8IntrinsicIdentifier\").bases(\"Expression\").build(\"name\").field(\"name\", String);\n  def(\"TopicReference\").bases(\"Expression\").build();\n}\nmaybeSetModuleExports(() => module);\n\nfunction typescriptDef(fork) {\n  fork.use(babelCoreDef);\n  fork.use(typeAnnotationsDef);\n  var types = fork.use(typesPlugin);\n  var n = types.namedTypes;\n  var def = types.Type.def;\n  var or = types.Type.or;\n  var defaults = fork.use(sharedPlugin).defaults;\n  var StringLiteral = types.Type.from(function(value, deep) {\n    if (n.StringLiteral && n.StringLiteral.check(value, deep)) {\n      return true;\n    }\n    if (n.Literal && n.Literal.check(value, deep) && typeof value.value === \"string\") {\n      return true;\n    }\n    return false;\n  }, \"StringLiteral\");\n  def(\"TSType\").bases(\"Node\");\n  var TSEntityName = or(\n    def(\"Identifier\"),\n    def(\"TSQualifiedName\")\n  );\n  def(\"TSTypeReference\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"typeName\", \"typeParameters\").field(\"typeName\", TSEntityName);\n  def(\"TSHasOptionalTypeParameterInstantiation\").field(\n    \"typeParameters\",\n    or(def(\"TSTypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSHasOptionalTypeParameters\").field(\n    \"typeParameters\",\n    or(def(\"TSTypeParameterDeclaration\"), null, void 0),\n    defaults[\"null\"]\n  );\n  def(\"TSHasOptionalTypeAnnotation\").field(\n    \"typeAnnotation\",\n    or(def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSQualifiedName\").bases(\"Node\").build(\"left\", \"right\").field(\"left\", TSEntityName).field(\"right\", TSEntityName);\n  def(\"TSAsExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\")).field(\n    \"extra\",\n    or({ parenthesized: Boolean }, null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeCastExpression\").bases(\"Expression\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSSatisfiesExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSNonNullExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  [\n    // Define all the simple keyword types.\n    \"TSAnyKeyword\",\n    \"TSBigIntKeyword\",\n    \"TSBooleanKeyword\",\n    \"TSNeverKeyword\",\n    \"TSNullKeyword\",\n    \"TSNumberKeyword\",\n    \"TSObjectKeyword\",\n    \"TSStringKeyword\",\n    \"TSSymbolKeyword\",\n    \"TSUndefinedKeyword\",\n    \"TSUnknownKeyword\",\n    \"TSVoidKeyword\",\n    \"TSIntrinsicKeyword\",\n    \"TSThisType\"\n  ].forEach((keywordType) => {\n    def(keywordType).bases(\"TSType\").build();\n  });\n  def(\"TSArrayType\").bases(\"TSType\").build(\"elementType\").field(\"elementType\", def(\"TSType\"));\n  def(\"TSLiteralType\").bases(\"TSType\").build(\"literal\").field(\"literal\", or(\n    def(\"NumericLiteral\"),\n    def(\"StringLiteral\"),\n    def(\"BooleanLiteral\"),\n    def(\"TemplateLiteral\"),\n    def(\"UnaryExpression\"),\n    def(\"BigIntLiteral\")\n  ));\n  def(\"TemplateLiteral\").field(\"expressions\", or(\n    [def(\"Expression\")],\n    [def(\"TSType\")]\n  ));\n  [\n    \"TSUnionType\",\n    \"TSIntersectionType\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\"TSType\").build(\"types\").field(\"types\", [def(\"TSType\")]);\n  });\n  def(\"TSConditionalType\").bases(\"TSType\").build(\"checkType\", \"extendsType\", \"trueType\", \"falseType\").field(\"checkType\", def(\"TSType\")).field(\"extendsType\", def(\"TSType\")).field(\"trueType\", def(\"TSType\")).field(\"falseType\", def(\"TSType\"));\n  def(\"TSInferType\").bases(\"TSType\").build(\"typeParameter\").field(\"typeParameter\", def(\"TSTypeParameter\"));\n  def(\"TSParenthesizedType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  var ParametersType = [or(\n    def(\"Identifier\"),\n    def(\"RestElement\"),\n    def(\"ArrayPattern\"),\n    def(\"ObjectPattern\")\n  )];\n  [\n    \"TSFunctionType\",\n    \"TSConstructorType\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\n      \"TSType\",\n      \"TSHasOptionalTypeParameters\",\n      \"TSHasOptionalTypeAnnotation\"\n    ).build(\"parameters\").field(\"parameters\", ParametersType);\n  });\n  def(\"TSDeclareFunction\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"params\", \"returnType\").field(\"declare\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"params\", [def(\"Pattern\")]).field(\n    \"returnType\",\n    or(\n      def(\"TSTypeAnnotation\"),\n      def(\"Noop\"),\n      // Still used?\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSDeclareMethod\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"key\", \"params\", \"returnType\").field(\"async\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"params\", [def(\"Pattern\")]).field(\"abstract\", Boolean, defaults[\"false\"]).field(\n    \"accessibility\",\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\"static\", Boolean, defaults[\"false\"]).field(\"computed\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"key\", or(\n    def(\"Identifier\"),\n    def(\"StringLiteral\"),\n    def(\"NumericLiteral\"),\n    // Only allowed if .computed is true.\n    def(\"Expression\")\n  )).field(\n    \"kind\",\n    or(\"get\", \"set\", \"method\", \"constructor\"),\n    function getDefault() {\n      return \"method\";\n    }\n  ).field(\n    \"access\",\n    // Not \"accessibility\"?\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  ).field(\n    \"returnType\",\n    or(\n      def(\"TSTypeAnnotation\"),\n      def(\"Noop\"),\n      // Still used?\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSMappedType\").bases(\"TSType\").build(\"typeParameter\", \"typeAnnotation\").field(\"readonly\", or(Boolean, \"+\", \"-\"), defaults[\"false\"]).field(\"typeParameter\", def(\"TSTypeParameter\")).field(\"optional\", or(Boolean, \"+\", \"-\"), defaults[\"false\"]).field(\n    \"typeAnnotation\",\n    or(def(\"TSType\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTupleType\").bases(\"TSType\").build(\"elementTypes\").field(\"elementTypes\", [or(\n    def(\"TSType\"),\n    def(\"TSNamedTupleMember\")\n  )]);\n  def(\"TSNamedTupleMember\").bases(\"TSType\").build(\"label\", \"elementType\", \"optional\").field(\"label\", def(\"Identifier\")).field(\"optional\", Boolean, defaults[\"false\"]).field(\"elementType\", def(\"TSType\"));\n  def(\"TSRestType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSOptionalType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSIndexedAccessType\").bases(\"TSType\").build(\"objectType\", \"indexType\").field(\"objectType\", def(\"TSType\")).field(\"indexType\", def(\"TSType\"));\n  def(\"TSTypeOperator\").bases(\"TSType\").build(\"operator\").field(\"operator\", String).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSTypeAnnotation\").bases(\"Node\").build(\"typeAnnotation\").field(\n    \"typeAnnotation\",\n    or(\n      def(\"TSType\"),\n      def(\"TSTypeAnnotation\")\n    )\n  );\n  def(\"TSIndexSignature\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\").build(\"parameters\", \"typeAnnotation\").field(\"parameters\", [def(\"Identifier\")]).field(\"readonly\", Boolean, defaults[\"false\"]);\n  def(\"TSPropertySignature\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\").build(\"key\", \"typeAnnotation\", \"optional\").field(\"key\", def(\"Expression\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"readonly\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSMethodSignature\").bases(\n    \"Declaration\",\n    \"TSHasOptionalTypeParameters\",\n    \"TSHasOptionalTypeAnnotation\"\n  ).build(\"key\", \"parameters\", \"typeAnnotation\").field(\"key\", def(\"Expression\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"parameters\", ParametersType);\n  def(\"TSTypePredicate\").bases(\"TSTypeAnnotation\", \"TSType\").build(\"parameterName\", \"typeAnnotation\", \"asserts\").field(\n    \"parameterName\",\n    or(\n      def(\"Identifier\"),\n      def(\"TSThisType\")\n    )\n  ).field(\n    \"typeAnnotation\",\n    or(def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  ).field(\"asserts\", Boolean, defaults[\"false\"]);\n  [\n    \"TSCallSignatureDeclaration\",\n    \"TSConstructSignatureDeclaration\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\n      \"Declaration\",\n      \"TSHasOptionalTypeParameters\",\n      \"TSHasOptionalTypeAnnotation\"\n    ).build(\"parameters\", \"typeAnnotation\").field(\"parameters\", ParametersType);\n  });\n  def(\"TSEnumMember\").bases(\"Node\").build(\"id\", \"initializer\").field(\"id\", or(def(\"Identifier\"), StringLiteral)).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeQuery\").bases(\"TSType\").build(\"exprName\").field(\"exprName\", or(TSEntityName, def(\"TSImportType\")));\n  var TSTypeMember = or(\n    def(\"TSCallSignatureDeclaration\"),\n    def(\"TSConstructSignatureDeclaration\"),\n    def(\"TSIndexSignature\"),\n    def(\"TSMethodSignature\"),\n    def(\"TSPropertySignature\")\n  );\n  def(\"TSTypeLiteral\").bases(\"TSType\").build(\"members\").field(\"members\", [TSTypeMember]);\n  def(\"TSTypeParameter\").bases(\"Identifier\").build(\"name\", \"constraint\", \"default\").field(\"name\", or(def(\"Identifier\"), String)).field(\"constraint\", or(def(\"TSType\"), void 0), defaults[\"undefined\"]).field(\"default\", or(def(\"TSType\"), void 0), defaults[\"undefined\"]);\n  def(\"TSTypeAssertion\").bases(\"Expression\", \"Pattern\").build(\"typeAnnotation\", \"expression\").field(\"typeAnnotation\", def(\"TSType\")).field(\"expression\", def(\"Expression\")).field(\n    \"extra\",\n    or({ parenthesized: Boolean }, null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeParameterDeclaration\").bases(\"Declaration\").build(\"params\").field(\"params\", [def(\"TSTypeParameter\")]);\n  def(\"TSInstantiationExpression\").bases(\"Expression\", \"TSHasOptionalTypeParameterInstantiation\").build(\"expression\", \"typeParameters\").field(\"expression\", def(\"Expression\"));\n  def(\"TSTypeParameterInstantiation\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"TSType\")]);\n  def(\"TSEnumDeclaration\").bases(\"Declaration\").build(\"id\", \"members\").field(\"id\", def(\"Identifier\")).field(\"const\", Boolean, defaults[\"false\"]).field(\"declare\", Boolean, defaults[\"false\"]).field(\"members\", [def(\"TSEnumMember\")]).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeAliasDeclaration\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"typeAnnotation\").field(\"id\", def(\"Identifier\")).field(\"declare\", Boolean, defaults[\"false\"]).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSModuleBlock\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"TSModuleDeclaration\").bases(\"Declaration\").build(\"id\", \"body\").field(\"id\", or(StringLiteral, TSEntityName)).field(\"declare\", Boolean, defaults[\"false\"]).field(\"global\", Boolean, defaults[\"false\"]).field(\n    \"body\",\n    or(\n      def(\"TSModuleBlock\"),\n      def(\"TSModuleDeclaration\"),\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSImportType\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"argument\", \"qualifier\", \"typeParameters\").field(\"argument\", StringLiteral).field(\"qualifier\", or(TSEntityName, void 0), defaults[\"undefined\"]);\n  def(\"TSImportEqualsDeclaration\").bases(\"Declaration\").build(\"id\", \"moduleReference\").field(\"id\", def(\"Identifier\")).field(\"isExport\", Boolean, defaults[\"false\"]).field(\n    \"moduleReference\",\n    or(\n      TSEntityName,\n      def(\"TSExternalModuleReference\")\n    )\n  );\n  def(\"TSExternalModuleReference\").bases(\"Declaration\").build(\"expression\").field(\"expression\", StringLiteral);\n  def(\"TSExportAssignment\").bases(\"Statement\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"TSNamespaceExportDeclaration\").bases(\"Declaration\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"TSInterfaceBody\").bases(\"Node\").build(\"body\").field(\"body\", [TSTypeMember]);\n  def(\"TSExpressionWithTypeArguments\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"expression\", \"typeParameters\").field(\"expression\", TSEntityName);\n  def(\"TSInterfaceDeclaration\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"body\").field(\"id\", TSEntityName).field(\"declare\", Boolean, defaults[\"false\"]).field(\n    \"extends\",\n    or([def(\"TSExpressionWithTypeArguments\")], null),\n    defaults[\"null\"]\n  ).field(\"body\", def(\"TSInterfaceBody\"));\n  def(\"TSParameterProperty\").bases(\"Pattern\").build(\"parameter\").field(\n    \"accessibility\",\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\"readonly\", Boolean, defaults[\"false\"]).field(\"parameter\", or(\n    def(\"Identifier\"),\n    def(\"AssignmentPattern\")\n  ));\n  def(\"ClassProperty\").field(\n    \"access\",\n    // Not \"accessibility\"?\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  );\n  def(\"ClassAccessorProperty\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\");\n  def(\"ClassBody\").field(\"body\", [or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"ClassPrivateProperty\"),\n    def(\"ClassAccessorProperty\"),\n    def(\"ClassMethod\"),\n    def(\"ClassPrivateMethod\"),\n    def(\"StaticBlock\"),\n    // Just need to add these types:\n    def(\"TSDeclareMethod\"),\n    TSTypeMember\n  )]);\n}\nmaybeSetModuleExports(() => module);\n\nvar namedTypes$1;\n((namedTypes2) => {\n})(namedTypes$1 || (namedTypes$1 = {}));\n\nconst {\n  astNodesAreEquivalent,\n  khulnasofts: khulnasofts$1,\n  builtInTypes,\n  defineMethod,\n  eachField,\n  finalize,\n  getKhulnasoftName,\n  getFieldNames,\n  getFieldValue,\n  getSupertypeNames,\n  namedTypes: n$3,\n  NodePath,\n  Path,\n  PathVisitor,\n  someField,\n  Type,\n  use,\n  visit\n} = fork([\n  // Feel free to add to or remove from this list of extension modules to\n  // configure the precise type hierarchy that you need.\n  esProposalsDef,\n  jsxDef,\n  flowDef,\n  esprimaDef,\n  babelDef,\n  typescriptDef\n]);\nObject.assign(namedTypes$1, n$3);\n\nconst n$2 = namedTypes$1;\nconst SourceMapConsumer = sourceMap.SourceMapConsumer;\nconst SourceMapGenerator = sourceMap.SourceMapGenerator;\nconst hasOwn$2 = Object.prototype.hasOwnProperty;\nfunction getLineTerminator() {\n  return \"\\n\";\n}\nfunction getOption(options, key, defaultValue) {\n  if (options && hasOwn$2.call(options, key)) {\n    return options[key];\n  }\n  return defaultValue;\n}\nfunction getUnionOfKeys(...args) {\n  const result = {};\n  const argc = args.length;\n  for (let i = 0; i < argc; ++i) {\n    const keys = Object.keys(args[i]);\n    const keyCount = keys.length;\n    for (let j = 0; j < keyCount; ++j) {\n      result[keys[j]] = true;\n    }\n  }\n  return result;\n}\nfunction comparePos(pos1, pos2) {\n  return pos1.line - pos2.line || pos1.column - pos2.column;\n}\nfunction copyPos(pos) {\n  return {\n    line: pos.line,\n    column: pos.column\n  };\n}\nfunction composeSourceMaps(formerMap, latterMap) {\n  if (formerMap) {\n    if (!latterMap) {\n      return formerMap;\n    }\n  } else {\n    return latterMap || null;\n  }\n  const smcFormer = new SourceMapConsumer(formerMap);\n  const smcLatter = new SourceMapConsumer(latterMap);\n  const smg = new SourceMapGenerator({\n    file: latterMap.file,\n    sourceRoot: latterMap.sourceRoot\n  });\n  const sourcesToContents = {};\n  smcLatter.eachMapping(function(mapping) {\n    const origPos = smcFormer.originalPositionFor({\n      line: mapping.originalLine,\n      column: mapping.originalColumn\n    });\n    const sourceName = origPos.source;\n    if (sourceName === null) {\n      return;\n    }\n    smg.addMapping({\n      source: sourceName,\n      original: copyPos(origPos),\n      generated: {\n        line: mapping.generatedLine,\n        column: mapping.generatedColumn\n      },\n      name: mapping.name\n    });\n    const sourceContent = smcFormer.sourceContentFor(sourceName);\n    if (sourceContent && !hasOwn$2.call(sourcesToContents, sourceName)) {\n      sourcesToContents[sourceName] = sourceContent;\n      smg.setSourceContent(sourceName, sourceContent);\n    }\n  });\n  return smg.toJSON();\n}\nfunction getTrueLoc(node, lines) {\n  if (!node.loc) {\n    return null;\n  }\n  const result = {\n    start: node.loc.start,\n    end: node.loc.end\n  };\n  function include(node2) {\n    expandLoc(result, node2.loc);\n  }\n  if (node.declaration && node.declaration.decorators && isExportDeclaration(node)) {\n    node.declaration.decorators.forEach(include);\n  }\n  if (comparePos(result.start, result.end) < 0) {\n    result.start = copyPos(result.start);\n    lines.skipSpaces(result.start, false, true);\n    if (comparePos(result.start, result.end) < 0) {\n      result.end = copyPos(result.end);\n      lines.skipSpaces(result.end, true, true);\n    }\n  }\n  if (node.comments) {\n    node.comments.forEach(include);\n  }\n  return result;\n}\nfunction expandLoc(parentLoc, childLoc) {\n  if (parentLoc && childLoc) {\n    if (comparePos(childLoc.start, parentLoc.start) < 0) {\n      parentLoc.start = childLoc.start;\n    }\n    if (comparePos(parentLoc.end, childLoc.end) < 0) {\n      parentLoc.end = childLoc.end;\n    }\n  }\n}\nfunction fixFaultyLocations(node, lines) {\n  const loc = node.loc;\n  if (loc) {\n    if (loc.start.line < 1) {\n      loc.start.line = 1;\n    }\n    if (loc.end.line < 1) {\n      loc.end.line = 1;\n    }\n  }\n  if (node.type === \"File\") {\n    loc.start = lines.firstPos();\n    loc.end = lines.lastPos();\n  }\n  fixForLoopHead(node, lines);\n  fixTemplateLiteral(node, lines);\n  if (loc && node.decorators) {\n    node.decorators.forEach(function(decorator) {\n      expandLoc(loc, decorator.loc);\n    });\n  } else if (node.declaration && isExportDeclaration(node)) {\n    node.declaration.loc = null;\n    const decorators = node.declaration.decorators;\n    if (decorators) {\n      decorators.forEach(function(decorator) {\n        expandLoc(loc, decorator.loc);\n      });\n    }\n  } else if (n$2.MethodDefinition && n$2.MethodDefinition.check(node) || n$2.Property.check(node) && (node.method || node.shorthand)) {\n    node.value.loc = null;\n    if (n$2.FunctionExpression.check(node.value)) {\n      node.value.id = null;\n    }\n  } else if (node.type === \"ObjectTypeProperty\") {\n    const loc2 = node.loc;\n    let end = loc2 && loc2.end;\n    if (end) {\n      end = copyPos(end);\n      if (lines.prevPos(end) && lines.charAt(end) === \",\") {\n        if (end = lines.skipSpaces(end, true, true)) {\n          loc2.end = end;\n        }\n      }\n    }\n  }\n}\nfunction fixForLoopHead(node, lines) {\n  if (node.type !== \"ForStatement\") {\n    return;\n  }\n  function fix(child) {\n    const loc = child && child.loc;\n    const start = loc && loc.start;\n    const end = loc && copyPos(loc.end);\n    while (start && end && comparePos(start, end) < 0) {\n      lines.prevPos(end);\n      if (lines.charAt(end) === \";\") {\n        loc.end.line = end.line;\n        loc.end.column = end.column;\n      } else {\n        break;\n      }\n    }\n  }\n  fix(node.init);\n  fix(node.test);\n  fix(node.update);\n}\nfunction fixTemplateLiteral(node, lines) {\n  if (node.type !== \"TemplateLiteral\") {\n    return;\n  }\n  if (node.quasis.length === 0) {\n    return;\n  }\n  if (node.loc) {\n    const afterLeftBackTickPos = copyPos(node.loc.start);\n    const firstQuasi = node.quasis[0];\n    if (comparePos(firstQuasi.loc.start, afterLeftBackTickPos) < 0) {\n      firstQuasi.loc.start = afterLeftBackTickPos;\n    }\n    const rightBackTickPos = copyPos(node.loc.end);\n    const lastQuasi = node.quasis[node.quasis.length - 1];\n    if (comparePos(rightBackTickPos, lastQuasi.loc.end) < 0) {\n      lastQuasi.loc.end = rightBackTickPos;\n    }\n  }\n  node.expressions.forEach(function(expr, i) {\n    const dollarCurlyPos = lines.skipSpaces(expr.loc.start, true, false);\n    if (lines.prevPos(dollarCurlyPos) && lines.charAt(dollarCurlyPos) === \"{\" && lines.prevPos(dollarCurlyPos) && lines.charAt(dollarCurlyPos) === \"$\") {\n      const quasiBefore = node.quasis[i];\n      if (comparePos(dollarCurlyPos, quasiBefore.loc.end) < 0) {\n        quasiBefore.loc.end = dollarCurlyPos;\n      }\n    }\n    const rightCurlyPos = lines.skipSpaces(expr.loc.end, false, false);\n    if (lines.charAt(rightCurlyPos) === \"}\") {\n      const quasiAfter = node.quasis[i + 1];\n      if (comparePos(quasiAfter.loc.start, rightCurlyPos) < 0) {\n        quasiAfter.loc.start = rightCurlyPos;\n      }\n    }\n  });\n}\nfunction isExportDeclaration(node) {\n  if (node)\n    switch (node.type) {\n      case \"ExportDeclaration\":\n      case \"ExportDefaultDeclaration\":\n      case \"ExportDefaultSpecifier\":\n      case \"DeclareExportDeclaration\":\n      case \"ExportNamedDeclaration\":\n      case \"ExportAllDeclaration\":\n        return true;\n    }\n  return false;\n}\nfunction getParentExportDeclaration(path) {\n  const parentNode = path.getParentNode();\n  if (path.getName() === \"declaration\" && isExportDeclaration(parentNode)) {\n    return parentNode;\n  }\n  return null;\n}\nfunction isTrailingCommaEnabled(options, context) {\n  const trailingComma = options.trailingComma;\n  if (typeof trailingComma === \"object\") {\n    return !!trailingComma[context];\n  }\n  return !!trailingComma;\n}\n\nconst defaults = {\n  tabWidth: 4,\n  useTabs: false,\n  reuseWhitespace: true,\n  lineTerminator: getLineTerminator(),\n  wrapColumn: 74,\n  // Aspirational for now.\n  sourceFileName: null,\n  sourceMapName: null,\n  sourceRoot: null,\n  inputSourceMap: null,\n  range: false,\n  tolerant: true,\n  quote: null,\n  trailingComma: false,\n  arrayBracketSpacing: false,\n  objectCurlySpacing: true,\n  arrowParensAlways: false,\n  flowObjectCommas: true,\n  tokens: true\n};\nconst hasOwn$1 = defaults.hasOwnProperty;\nfunction normalize(opts) {\n  const options = opts || defaults;\n  function get(key) {\n    return hasOwn$1.call(options, key) ? options[key] : defaults[key];\n  }\n  return {\n    tabWidth: +get(\"tabWidth\"),\n    useTabs: !!get(\"useTabs\"),\n    reuseWhitespace: !!get(\"reuseWhitespace\"),\n    lineTerminator: get(\"lineTerminator\"),\n    wrapColumn: Math.max(get(\"wrapColumn\"), 0),\n    sourceFileName: get(\"sourceFileName\"),\n    sourceMapName: get(\"sourceMapName\"),\n    sourceRoot: get(\"sourceRoot\"),\n    inputSourceMap: get(\"inputSourceMap\"),\n    parser: get(\"esprima\") || get(\"parser\"),\n    range: get(\"range\"),\n    tolerant: get(\"tolerant\"),\n    quote: get(\"quote\"),\n    trailingComma: get(\"trailingComma\"),\n    arrayBracketSpacing: get(\"arrayBracketSpacing\"),\n    objectCurlySpacing: get(\"objectCurlySpacing\"),\n    arrowParensAlways: get(\"arrowParensAlways\"),\n    flowObjectCommas: get(\"flowObjectCommas\"),\n    tokens: !!get(\"tokens\")\n  };\n}\n\nclass Mapping {\n  constructor(sourceLines, sourceLoc, targetLoc = sourceLoc) {\n    this.sourceLines = sourceLines;\n    this.sourceLoc = sourceLoc;\n    this.targetLoc = targetLoc;\n  }\n  slice(lines, start, end = lines.lastPos()) {\n    const sourceLines = this.sourceLines;\n    let sourceLoc = this.sourceLoc;\n    let targetLoc = this.targetLoc;\n    function skip(name) {\n      const sourceFromPos = sourceLoc[name];\n      const targetFromPos = targetLoc[name];\n      let targetToPos = start;\n      if (name === \"end\") {\n        targetToPos = end;\n      }\n      return skipChars(\n        sourceLines,\n        sourceFromPos,\n        lines,\n        targetFromPos,\n        targetToPos\n      );\n    }\n    if (comparePos(start, targetLoc.start) <= 0) {\n      if (comparePos(targetLoc.end, end) <= 0) {\n        targetLoc = {\n          start: subtractPos(targetLoc.start, start.line, start.column),\n          end: subtractPos(targetLoc.end, start.line, start.column)\n        };\n      } else if (comparePos(end, targetLoc.start) <= 0) {\n        return null;\n      } else {\n        sourceLoc = {\n          start: sourceLoc.start,\n          end: skip(\"end\")\n        };\n        targetLoc = {\n          start: subtractPos(targetLoc.start, start.line, start.column),\n          end: subtractPos(end, start.line, start.column)\n        };\n      }\n    } else {\n      if (comparePos(targetLoc.end, start) <= 0) {\n        return null;\n      }\n      if (comparePos(targetLoc.end, end) <= 0) {\n        sourceLoc = {\n          start: skip(\"start\"),\n          end: sourceLoc.end\n        };\n        targetLoc = {\n          // Same as subtractPos(start, start.line, start.column):\n          start: { line: 1, column: 0 },\n          end: subtractPos(targetLoc.end, start.line, start.column)\n        };\n      } else {\n        sourceLoc = {\n          start: skip(\"start\"),\n          end: skip(\"end\")\n        };\n        targetLoc = {\n          // Same as subtractPos(start, start.line, start.column):\n          start: { line: 1, column: 0 },\n          end: subtractPos(end, start.line, start.column)\n        };\n      }\n    }\n    return new Mapping(this.sourceLines, sourceLoc, targetLoc);\n  }\n  add(line, column) {\n    return new Mapping(this.sourceLines, this.sourceLoc, {\n      start: addPos(this.targetLoc.start, line, column),\n      end: addPos(this.targetLoc.end, line, column)\n    });\n  }\n  subtract(line, column) {\n    return new Mapping(this.sourceLines, this.sourceLoc, {\n      start: subtractPos(this.targetLoc.start, line, column),\n      end: subtractPos(this.targetLoc.end, line, column)\n    });\n  }\n  indent(by, skipFirstLine = false, noNegativeColumns = false) {\n    if (by === 0) {\n      return this;\n    }\n    let targetLoc = this.targetLoc;\n    const startLine = targetLoc.start.line;\n    const endLine = targetLoc.end.line;\n    if (skipFirstLine && startLine === 1 && endLine === 1) {\n      return this;\n    }\n    targetLoc = {\n      start: targetLoc.start,\n      end: targetLoc.end\n    };\n    if (!skipFirstLine || startLine > 1) {\n      const startColumn = targetLoc.start.column + by;\n      targetLoc.start = {\n        line: startLine,\n        column: noNegativeColumns ? Math.max(0, startColumn) : startColumn\n      };\n    }\n    if (!skipFirstLine || endLine > 1) {\n      const endColumn = targetLoc.end.column + by;\n      targetLoc.end = {\n        line: endLine,\n        column: noNegativeColumns ? Math.max(0, endColumn) : endColumn\n      };\n    }\n    return new Mapping(this.sourceLines, this.sourceLoc, targetLoc);\n  }\n}\nfunction addPos(toPos, line, column) {\n  return {\n    line: toPos.line + line - 1,\n    column: toPos.line === 1 ? toPos.column + column : toPos.column\n  };\n}\nfunction subtractPos(fromPos, line, column) {\n  return {\n    line: fromPos.line - line + 1,\n    column: fromPos.line === line ? fromPos.column - column : fromPos.column\n  };\n}\nfunction skipChars(sourceLines, sourceFromPos, targetLines, targetFromPos, targetToPos) {\n  const targetComparison = comparePos(targetFromPos, targetToPos);\n  if (targetComparison === 0) {\n    return sourceFromPos;\n  }\n  let sourceCursor, targetCursor;\n  if (targetComparison < 0) {\n    sourceCursor = sourceLines.skipSpaces(sourceFromPos) || sourceLines.lastPos();\n    targetCursor = targetLines.skipSpaces(targetFromPos) || targetLines.lastPos();\n    const lineDiff = targetToPos.line - targetCursor.line;\n    sourceCursor.line += lineDiff;\n    targetCursor.line += lineDiff;\n    if (lineDiff > 0) {\n      sourceCursor.column = 0;\n      targetCursor.column = 0;\n    }\n    while (comparePos(targetCursor, targetToPos) < 0 && targetLines.nextPos(targetCursor, true)) {\n    }\n  } else {\n    sourceCursor = sourceLines.skipSpaces(sourceFromPos, true) || sourceLines.firstPos();\n    targetCursor = targetLines.skipSpaces(targetFromPos, true) || targetLines.firstPos();\n    const lineDiff = targetToPos.line - targetCursor.line;\n    sourceCursor.line += lineDiff;\n    targetCursor.line += lineDiff;\n    if (lineDiff < 0) {\n      sourceCursor.column = sourceLines.getLineLength(sourceCursor.line);\n      targetCursor.column = targetLines.getLineLength(targetCursor.line);\n    }\n    while (comparePos(targetToPos, targetCursor) < 0 && targetLines.prevPos(targetCursor, true)) {\n    }\n  }\n  return sourceCursor;\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => {\n  __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass Lines {\n  constructor(infos, sourceFileName = null) {\n    this.infos = infos;\n    __publicField$1(this, \"length\");\n    __publicField$1(this, \"name\");\n    __publicField$1(this, \"mappings\", []);\n    __publicField$1(this, \"cachedSourceMap\", null);\n    __publicField$1(this, \"cachedTabWidth\");\n    this.length = infos.length;\n    this.name = sourceFileName || null;\n    if (this.name) {\n      this.mappings.push(\n        new Mapping(this, {\n          start: this.firstPos(),\n          end: this.lastPos()\n        })\n      );\n    }\n  }\n  toString(options) {\n    return this.sliceString(this.firstPos(), this.lastPos(), options);\n  }\n  getSourceMap(sourceMapName, sourceRoot) {\n    if (!sourceMapName) {\n      return null;\n    }\n    const targetLines = this;\n    function updateJSON(json) {\n      json = json || {};\n      json.file = sourceMapName;\n      if (sourceRoot) {\n        json.sourceRoot = sourceRoot;\n      }\n      return json;\n    }\n    if (targetLines.cachedSourceMap) {\n      return updateJSON(targetLines.cachedSourceMap.toJSON());\n    }\n    const smg = new sourceMap.SourceMapGenerator(updateJSON());\n    const sourcesToContents = {};\n    targetLines.mappings.forEach(function(mapping) {\n      const sourceCursor = mapping.sourceLines.skipSpaces(mapping.sourceLoc.start) || mapping.sourceLines.lastPos();\n      const targetCursor = targetLines.skipSpaces(mapping.targetLoc.start) || targetLines.lastPos();\n      while (comparePos(sourceCursor, mapping.sourceLoc.end) < 0 && comparePos(targetCursor, mapping.targetLoc.end) < 0) {\n        mapping.sourceLines.charAt(sourceCursor);\n        targetLines.charAt(targetCursor);\n        const sourceName = mapping.sourceLines.name;\n        smg.addMapping({\n          source: sourceName,\n          original: { line: sourceCursor.line, column: sourceCursor.column },\n          generated: { line: targetCursor.line, column: targetCursor.column }\n        });\n        if (!hasOwn.call(sourcesToContents, sourceName)) {\n          const sourceContent = mapping.sourceLines.toString();\n          smg.setSourceContent(sourceName, sourceContent);\n          sourcesToContents[sourceName] = sourceContent;\n        }\n        targetLines.nextPos(targetCursor, true);\n        mapping.sourceLines.nextPos(sourceCursor, true);\n      }\n    });\n    targetLines.cachedSourceMap = smg;\n    return smg.toJSON();\n  }\n  bootstrapCharAt(pos) {\n    const line = pos.line, column = pos.column, strings = this.toString().split(lineTerminatorSeqExp), string = strings[line - 1];\n    if (typeof string === \"undefined\")\n      return \"\";\n    if (column === string.length && line < strings.length)\n      return \"\\n\";\n    if (column >= string.length)\n      return \"\";\n    return string.charAt(column);\n  }\n  charAt(pos) {\n    let line = pos.line, column = pos.column, secret = this, infos = secret.infos, info = infos[line - 1], c = column;\n    if (typeof info === \"undefined\" || c < 0)\n      return \"\";\n    const indent = this.getIndentAt(line);\n    if (c < indent)\n      return \" \";\n    c += info.sliceStart - indent;\n    if (c === info.sliceEnd && line < this.length)\n      return \"\\n\";\n    if (c >= info.sliceEnd)\n      return \"\";\n    return info.line.charAt(c);\n  }\n  stripMargin(width, skipFirstLine) {\n    if (width === 0)\n      return this;\n    if (skipFirstLine && this.length === 1)\n      return this;\n    const lines = new Lines(\n      this.infos.map(function(info, i) {\n        if (info.line && (i > 0 || !skipFirstLine)) {\n          info = {\n            ...info,\n            indent: Math.max(0, info.indent - width)\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(width, skipFirstLine, true));\n      });\n    }\n    return lines;\n  }\n  indent(by) {\n    if (by === 0) {\n      return this;\n    }\n    const lines = new Lines(\n      this.infos.map(function(info) {\n        if (info.line && !info.locked) {\n          info = {\n            ...info,\n            indent: info.indent + by\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(by));\n      });\n    }\n    return lines;\n  }\n  indentTail(by) {\n    if (by === 0) {\n      return this;\n    }\n    if (this.length < 2) {\n      return this;\n    }\n    const lines = new Lines(\n      this.infos.map(function(info, i) {\n        if (i > 0 && info.line && !info.locked) {\n          info = {\n            ...info,\n            indent: info.indent + by\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(by, true));\n      });\n    }\n    return lines;\n  }\n  lockIndentTail() {\n    if (this.length < 2) {\n      return this;\n    }\n    return new Lines(\n      this.infos.map((info, i) => ({\n        ...info,\n        locked: i > 0\n      }))\n    );\n  }\n  getIndentAt(line) {\n    return Math.max(this.infos[line - 1].indent, 0);\n  }\n  guessTabWidth() {\n    if (typeof this.cachedTabWidth === \"number\") {\n      return this.cachedTabWidth;\n    }\n    const counts = [];\n    let lastIndent = 0;\n    for (let line = 1, last = this.length; line <= last; ++line) {\n      const info = this.infos[line - 1];\n      const sliced = info.line.slice(info.sliceStart, info.sliceEnd);\n      if (isOnlyWhitespace(sliced)) {\n        continue;\n      }\n      const diff = Math.abs(info.indent - lastIndent);\n      counts[diff] = ~~counts[diff] + 1;\n      lastIndent = info.indent;\n    }\n    let maxCount = -1;\n    let result = 2;\n    for (let tabWidth = 1; tabWidth < counts.length; tabWidth += 1) {\n      if (hasOwn.call(counts, tabWidth) && counts[tabWidth] > maxCount) {\n        maxCount = counts[tabWidth];\n        result = tabWidth;\n      }\n    }\n    return this.cachedTabWidth = result;\n  }\n  // Determine if the list of lines has a first line that starts with a //\n  // or /* comment. If this is the case, the code may need to be wrapped in\n  // parens to avoid ASI issues.\n  startsWithComment() {\n    if (this.infos.length === 0) {\n      return false;\n    }\n    const firstLineInfo = this.infos[0], sliceStart = firstLineInfo.sliceStart, sliceEnd = firstLineInfo.sliceEnd, firstLine = firstLineInfo.line.slice(sliceStart, sliceEnd).trim();\n    return firstLine.length === 0 || firstLine.slice(0, 2) === \"//\" || firstLine.slice(0, 2) === \"/*\";\n  }\n  isOnlyWhitespace() {\n    return isOnlyWhitespace(this.toString());\n  }\n  isPrecededOnlyByWhitespace(pos) {\n    const info = this.infos[pos.line - 1];\n    const indent = Math.max(info.indent, 0);\n    const diff = pos.column - indent;\n    if (diff <= 0) {\n      return true;\n    }\n    const start = info.sliceStart;\n    const end = Math.min(start + diff, info.sliceEnd);\n    const prefix = info.line.slice(start, end);\n    return isOnlyWhitespace(prefix);\n  }\n  getLineLength(line) {\n    const info = this.infos[line - 1];\n    return this.getIndentAt(line) + info.sliceEnd - info.sliceStart;\n  }\n  nextPos(pos, skipSpaces = false) {\n    const l = Math.max(pos.line, 0), c = Math.max(pos.column, 0);\n    if (c < this.getLineLength(l)) {\n      pos.column += 1;\n      return skipSpaces ? !!this.skipSpaces(pos, false, true) : true;\n    }\n    if (l < this.length) {\n      pos.line += 1;\n      pos.column = 0;\n      return skipSpaces ? !!this.skipSpaces(pos, false, true) : true;\n    }\n    return false;\n  }\n  prevPos(pos, skipSpaces = false) {\n    let l = pos.line, c = pos.column;\n    if (c < 1) {\n      l -= 1;\n      if (l < 1)\n        return false;\n      c = this.getLineLength(l);\n    } else {\n      c = Math.min(c - 1, this.getLineLength(l));\n    }\n    pos.line = l;\n    pos.column = c;\n    return skipSpaces ? !!this.skipSpaces(pos, true, true) : true;\n  }\n  firstPos() {\n    return { line: 1, column: 0 };\n  }\n  lastPos() {\n    return {\n      line: this.length,\n      column: this.getLineLength(this.length)\n    };\n  }\n  skipSpaces(pos, backward = false, modifyInPlace = false) {\n    if (pos) {\n      pos = modifyInPlace ? pos : {\n        line: pos.line,\n        column: pos.column\n      };\n    } else if (backward) {\n      pos = this.lastPos();\n    } else {\n      pos = this.firstPos();\n    }\n    if (backward) {\n      while (this.prevPos(pos)) {\n        if (!isOnlyWhitespace(this.charAt(pos)) && this.nextPos(pos)) {\n          return pos;\n        }\n      }\n      return null;\n    } else {\n      while (isOnlyWhitespace(this.charAt(pos))) {\n        if (!this.nextPos(pos)) {\n          return null;\n        }\n      }\n      return pos;\n    }\n  }\n  trimLeft() {\n    const pos = this.skipSpaces(this.firstPos(), false, true);\n    return pos ? this.slice(pos) : emptyLines;\n  }\n  trimRight() {\n    const pos = this.skipSpaces(this.lastPos(), true, true);\n    return pos ? this.slice(this.firstPos(), pos) : emptyLines;\n  }\n  trim() {\n    const start = this.skipSpaces(this.firstPos(), false, true);\n    if (start === null) {\n      return emptyLines;\n    }\n    const end = this.skipSpaces(this.lastPos(), true, true);\n    if (end === null) {\n      return emptyLines;\n    }\n    return this.slice(start, end);\n  }\n  eachPos(callback, startPos = this.firstPos(), skipSpaces = false) {\n    const pos = this.firstPos();\n    if (startPos) {\n      pos.line = startPos.line, pos.column = startPos.column;\n    }\n    if (skipSpaces && !this.skipSpaces(pos, false, true)) {\n      return;\n    }\n    do\n      callback.call(this, pos);\n    while (this.nextPos(pos, skipSpaces));\n  }\n  bootstrapSlice(start, end) {\n    const strings = this.toString().split(lineTerminatorSeqExp).slice(start.line - 1, end.line);\n    if (strings.length > 0) {\n      strings.push(strings.pop().slice(0, end.column));\n      strings[0] = strings[0].slice(start.column);\n    }\n    return fromString(strings.join(\"\\n\"));\n  }\n  slice(start, end) {\n    if (!end) {\n      if (!start) {\n        return this;\n      }\n      end = this.lastPos();\n    }\n    if (!start) {\n      throw new Error(\"cannot slice with end but not start\");\n    }\n    const sliced = this.infos.slice(start.line - 1, end.line);\n    if (start.line === end.line) {\n      sliced[0] = sliceInfo(sliced[0], start.column, end.column);\n    } else {\n      sliced[0] = sliceInfo(sliced[0], start.column);\n      sliced.push(sliceInfo(sliced.pop(), 0, end.column));\n    }\n    const lines = new Lines(sliced);\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        const sliced2 = mapping.slice(this, start, end);\n        if (sliced2) {\n          newMappings.push(sliced2);\n        }\n      }, this);\n    }\n    return lines;\n  }\n  bootstrapSliceString(start, end, options) {\n    return this.slice(start, end).toString(options);\n  }\n  sliceString(start = this.firstPos(), end = this.lastPos(), options) {\n    const { tabWidth, useTabs, reuseWhitespace, lineTerminator } = normalize(options);\n    const parts = [];\n    for (let line = start.line; line <= end.line; ++line) {\n      let info = this.infos[line - 1];\n      if (line === start.line) {\n        if (line === end.line) {\n          info = sliceInfo(info, start.column, end.column);\n        } else {\n          info = sliceInfo(info, start.column);\n        }\n      } else if (line === end.line) {\n        info = sliceInfo(info, 0, end.column);\n      }\n      const indent = Math.max(info.indent, 0);\n      const before = info.line.slice(0, info.sliceStart);\n      if (reuseWhitespace && isOnlyWhitespace(before) && countSpaces(before, tabWidth) === indent) {\n        parts.push(info.line.slice(0, info.sliceEnd));\n        continue;\n      }\n      let tabs = 0;\n      let spaces = indent;\n      if (useTabs) {\n        tabs = Math.floor(indent / tabWidth);\n        spaces -= tabs * tabWidth;\n      }\n      let result = \"\";\n      if (tabs > 0) {\n        result += new Array(tabs + 1).join(\"\t\");\n      }\n      if (spaces > 0) {\n        result += new Array(spaces + 1).join(\" \");\n      }\n      result += info.line.slice(info.sliceStart, info.sliceEnd);\n      parts.push(result);\n    }\n    return parts.join(lineTerminator);\n  }\n  isEmpty() {\n    return this.length < 2 && this.getLineLength(1) < 1;\n  }\n  join(elements) {\n    const separator = this;\n    const infos = [];\n    const mappings = [];\n    let prevInfo;\n    function appendLines(linesOrNull) {\n      if (linesOrNull === null) {\n        return;\n      }\n      if (prevInfo) {\n        const info = linesOrNull.infos[0];\n        const indent = new Array(info.indent + 1).join(\" \");\n        const prevLine = infos.length;\n        const prevColumn = Math.max(prevInfo.indent, 0) + prevInfo.sliceEnd - prevInfo.sliceStart;\n        prevInfo.line = prevInfo.line.slice(0, prevInfo.sliceEnd) + indent + info.line.slice(info.sliceStart, info.sliceEnd);\n        prevInfo.locked = prevInfo.locked || info.locked;\n        prevInfo.sliceEnd = prevInfo.line.length;\n        if (linesOrNull.mappings.length > 0) {\n          linesOrNull.mappings.forEach(function(mapping) {\n            mappings.push(mapping.add(prevLine, prevColumn));\n          });\n        }\n      } else if (linesOrNull.mappings.length > 0) {\n        mappings.push.apply(mappings, linesOrNull.mappings);\n      }\n      linesOrNull.infos.forEach(function(info, i) {\n        if (!prevInfo || i > 0) {\n          prevInfo = { ...info };\n          infos.push(prevInfo);\n        }\n      });\n    }\n    function appendWithSeparator(linesOrNull, i) {\n      if (i > 0)\n        appendLines(separator);\n      appendLines(linesOrNull);\n    }\n    elements.map(function(elem) {\n      const lines2 = fromString(elem);\n      if (lines2.isEmpty())\n        return null;\n      return lines2;\n    }).forEach((linesOrNull, i) => {\n      if (separator.isEmpty()) {\n        appendLines(linesOrNull);\n      } else {\n        appendWithSeparator(linesOrNull, i);\n      }\n    });\n    if (infos.length < 1)\n      return emptyLines;\n    const lines = new Lines(infos);\n    lines.mappings = mappings;\n    return lines;\n  }\n  concat(...args) {\n    const list = [this];\n    list.push.apply(list, args);\n    return emptyLines.join(list);\n  }\n}\nconst fromStringCache = {};\nconst hasOwn = fromStringCache.hasOwnProperty;\nconst maxCacheKeyLen = 10;\nfunction countSpaces(spaces, tabWidth) {\n  let count = 0;\n  const len = spaces.length;\n  for (let i = 0; i < len; ++i) {\n    switch (spaces.charCodeAt(i)) {\n      case 9: {\n        const next = Math.ceil(count / tabWidth) * tabWidth;\n        if (next === count) {\n          count += tabWidth;\n        } else {\n          count = next;\n        }\n        break;\n      }\n      case 11:\n      case 12:\n      case 13:\n      case 65279:\n        break;\n      case 32:\n      default:\n        count += 1;\n        break;\n    }\n  }\n  return count;\n}\nconst leadingSpaceExp = /^\\s*/;\nconst lineTerminatorSeqExp = /\\u000D\\u000A|\\u000D(?!\\u000A)|\\u000A|\\u2028|\\u2029/;\nfunction fromString(string, options) {\n  if (string instanceof Lines)\n    return string;\n  string += \"\";\n  const tabWidth = options && options.tabWidth;\n  const tabless = string.indexOf(\"\t\") < 0;\n  const cacheable = !options && tabless && string.length <= maxCacheKeyLen;\n  if (cacheable && hasOwn.call(fromStringCache, string))\n    return fromStringCache[string];\n  const lines = new Lines(\n    string.split(lineTerminatorSeqExp).map(function(line) {\n      const spaces = leadingSpaceExp.exec(line)[0];\n      return {\n        line,\n        indent: countSpaces(spaces, tabWidth),\n        // Boolean indicating whether this line can be reindented.\n        locked: false,\n        sliceStart: spaces.length,\n        sliceEnd: line.length\n      };\n    }),\n    normalize(options).sourceFileName\n  );\n  if (cacheable)\n    fromStringCache[string] = lines;\n  return lines;\n}\nfunction isOnlyWhitespace(string) {\n  return !/\\S/.test(string);\n}\nfunction sliceInfo(info, startCol, endCol) {\n  let sliceStart = info.sliceStart;\n  let sliceEnd = info.sliceEnd;\n  let indent = Math.max(info.indent, 0);\n  let lineLength = indent + sliceEnd - sliceStart;\n  if (typeof endCol === \"undefined\") {\n    endCol = lineLength;\n  }\n  startCol = Math.max(startCol, 0);\n  endCol = Math.min(endCol, lineLength);\n  endCol = Math.max(endCol, startCol);\n  if (endCol < indent) {\n    indent = endCol;\n    sliceEnd = sliceStart;\n  } else {\n    sliceEnd -= lineLength - endCol;\n  }\n  lineLength = endCol;\n  lineLength -= startCol;\n  if (startCol < indent) {\n    indent -= startCol;\n  } else {\n    startCol -= indent;\n    indent = 0;\n    sliceStart += startCol;\n  }\n  if (info.indent === indent && info.sliceStart === sliceStart && info.sliceEnd === sliceEnd) {\n    return info;\n  }\n  return {\n    line: info.line,\n    indent,\n    // A destructive slice always unlocks indentation.\n    locked: false,\n    sliceStart,\n    sliceEnd\n  };\n}\nfunction concat(elements) {\n  return emptyLines.join(elements);\n}\nconst emptyLines = fromString(\"\");\n\nconst n$1 = namedTypes$1;\nconst isArray$3 = builtInTypes.array;\nconst isObject$3 = builtInTypes.object;\nconst childNodesCache = /* @__PURE__ */ new WeakMap();\nfunction getSortedChildNodes(node, lines, resultArray) {\n  if (!node) {\n    return resultArray;\n  }\n  fixFaultyLocations(node, lines);\n  if (resultArray) {\n    if (n$1.Node.check(node) && n$1.SourceLocation.check(node.loc)) {\n      let i = resultArray.length - 1;\n      for (; i >= 0; --i) {\n        const child = resultArray[i];\n        if (child && child.loc && comparePos(child.loc.end, node.loc.start) <= 0) {\n          break;\n        }\n      }\n      resultArray.splice(i + 1, 0, node);\n      return resultArray;\n    }\n  } else {\n    const childNodes = childNodesCache.get(node);\n    if (childNodes) {\n      return childNodes;\n    }\n  }\n  let names;\n  if (isArray$3.check(node)) {\n    names = Object.keys(node);\n  } else if (isObject$3.check(node)) {\n    names = getFieldNames(node);\n  } else {\n    return resultArray;\n  }\n  if (!resultArray) {\n    childNodesCache.set(node, resultArray = []);\n  }\n  for (let i = 0, nameCount = names.length; i < nameCount; ++i) {\n    getSortedChildNodes(node[names[i]], lines, resultArray);\n  }\n  return resultArray;\n}\nfunction decorateComment(node, comment, lines) {\n  const childNodes = getSortedChildNodes(node, lines);\n  let left = 0;\n  let right = childNodes && childNodes.length;\n  let precedingNode;\n  let followingNode;\n  while (typeof right === \"number\" && left < right) {\n    const middle = left + right >> 1;\n    const child = childNodes[middle];\n    if (comparePos(child.loc.start, comment.loc.start) <= 0 && comparePos(comment.loc.end, child.loc.end) <= 0) {\n      decorateComment(comment.enclosingNode = child, comment, lines);\n      return;\n    }\n    if (comparePos(child.loc.end, comment.loc.start) <= 0) {\n      precedingNode = child;\n      left = middle + 1;\n      continue;\n    }\n    if (comparePos(comment.loc.end, child.loc.start) <= 0) {\n      followingNode = child;\n      right = middle;\n      continue;\n    }\n    throw new Error(\"Comment location overlaps with node location\");\n  }\n  if (precedingNode) {\n    comment.precedingNode = precedingNode;\n  }\n  if (followingNode) {\n    comment.followingNode = followingNode;\n  }\n}\nfunction attach(comments, ast, lines) {\n  if (!isArray$3.check(comments)) {\n    return;\n  }\n  const tiesToBreak = [];\n  comments.forEach(function(comment) {\n    comment.loc.lines = lines;\n    decorateComment(ast, comment, lines);\n    const pn = comment.precedingNode;\n    const en = comment.enclosingNode;\n    const fn = comment.followingNode;\n    if (pn && fn) {\n      const tieCount = tiesToBreak.length;\n      if (tieCount > 0) {\n        const lastTie = tiesToBreak[tieCount - 1];\n        if (lastTie.followingNode !== comment.followingNode) {\n          breakTies(tiesToBreak, lines);\n        }\n      }\n      tiesToBreak.push(comment);\n    } else if (pn) {\n      breakTies(tiesToBreak, lines);\n      addTrailingComment(pn, comment);\n    } else if (fn) {\n      breakTies(tiesToBreak, lines);\n      addLeadingComment(fn, comment);\n    } else if (en) {\n      breakTies(tiesToBreak, lines);\n      addDanglingComment(en, comment);\n    } else {\n      throw new Error(\"AST contains no nodes at all?\");\n    }\n  });\n  breakTies(tiesToBreak, lines);\n  comments.forEach(function(comment) {\n    delete comment.precedingNode;\n    delete comment.enclosingNode;\n    delete comment.followingNode;\n  });\n}\nfunction breakTies(tiesToBreak, lines) {\n  const tieCount = tiesToBreak.length;\n  if (tieCount === 0) {\n    return;\n  }\n  const pn = tiesToBreak[0].precedingNode;\n  const fn = tiesToBreak[0].followingNode;\n  let gapEndPos = fn.loc.start;\n  let indexOfFirstLeadingComment = tieCount;\n  let comment;\n  for (; indexOfFirstLeadingComment > 0; --indexOfFirstLeadingComment) {\n    comment = tiesToBreak[indexOfFirstLeadingComment - 1];\n    const gap = lines.sliceString(comment.loc.end, gapEndPos);\n    if (/\\S/.test(gap)) {\n      break;\n    }\n    gapEndPos = comment.loc.start;\n  }\n  while (indexOfFirstLeadingComment <= tieCount && (comment = tiesToBreak[indexOfFirstLeadingComment]) && // If the comment is a //-style comment and indented more\n  // deeply than the node itself, reconsider it as trailing.\n  (comment.type === \"Line\" || comment.type === \"CommentLine\") && comment.loc.start.column > fn.loc.start.column) {\n    ++indexOfFirstLeadingComment;\n  }\n  if (indexOfFirstLeadingComment) {\n    const { enclosingNode } = tiesToBreak[indexOfFirstLeadingComment - 1];\n    if (enclosingNode?.type === \"CallExpression\") {\n      --indexOfFirstLeadingComment;\n    }\n  }\n  tiesToBreak.forEach(function(comment2, i) {\n    if (i < indexOfFirstLeadingComment) {\n      addTrailingComment(pn, comment2);\n    } else {\n      addLeadingComment(fn, comment2);\n    }\n  });\n  tiesToBreak.length = 0;\n}\nfunction addCommentHelper(node, comment) {\n  const comments = node.comments || (node.comments = []);\n  comments.push(comment);\n}\nfunction addLeadingComment(node, comment) {\n  comment.leading = true;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\nfunction addDanglingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\nfunction addTrailingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = true;\n  addCommentHelper(node, comment);\n}\nfunction printLeadingComment(commentPath, print) {\n  const comment = commentPath.getValue();\n  n$1.Comment.assert(comment);\n  const loc = comment.loc;\n  const lines = loc && loc.lines;\n  const parts = [print(commentPath)];\n  if (comment.trailing) {\n    parts.push(\"\\n\");\n  } else if (lines instanceof Lines) {\n    const trailingSpace = lines.slice(\n      loc.end,\n      lines.skipSpaces(loc.end) || lines.lastPos()\n    );\n    if (trailingSpace.length === 1) {\n      parts.push(trailingSpace);\n    } else {\n      parts.push(new Array(trailingSpace.length).join(\"\\n\"));\n    }\n  } else {\n    parts.push(\"\\n\");\n  }\n  return concat(parts);\n}\nfunction printTrailingComment(commentPath, print) {\n  const comment = commentPath.getValue(commentPath);\n  n$1.Comment.assert(comment);\n  const loc = comment.loc;\n  const lines = loc && loc.lines;\n  const parts = [];\n  if (lines instanceof Lines) {\n    const fromPos = lines.skipSpaces(loc.start, true) || lines.firstPos();\n    const leadingSpace = lines.slice(fromPos, loc.start);\n    if (leadingSpace.length === 1) {\n      parts.push(leadingSpace);\n    } else {\n      parts.push(new Array(leadingSpace.length).join(\"\\n\"));\n    }\n  }\n  parts.push(print(commentPath));\n  return concat(parts);\n}\nfunction printComments(path, print) {\n  const value = path.getValue();\n  const innerLines = print(path);\n  const comments = n$1.Node.check(value) && getFieldValue(value, \"comments\");\n  if (!comments || comments.length === 0) {\n    return innerLines;\n  }\n  const leadingParts = [];\n  const trailingParts = [innerLines];\n  path.each(function(commentPath) {\n    const comment = commentPath.getValue();\n    const leading = getFieldValue(comment, \"leading\");\n    const trailing = getFieldValue(comment, \"trailing\");\n    if (leading || trailing && !(n$1.Statement.check(value) || comment.type === \"Block\" || comment.type === \"CommentBlock\")) {\n      leadingParts.push(printLeadingComment(commentPath, print));\n    } else if (trailing) {\n      trailingParts.push(printTrailingComment(commentPath, print));\n    }\n  }, \"comments\");\n  leadingParts.push.apply(leadingParts, trailingParts);\n  return concat(leadingParts);\n}\n\nconst b$5 = khulnasofts$1;\nconst isObject$2 = builtInTypes.object;\nconst isArray$2 = builtInTypes.array;\nfunction parse(source, options) {\n  options = normalize(options);\n  const lines = fromString(source, options);\n  const sourceWithoutTabs = lines.toString({\n    tabWidth: options.tabWidth,\n    reuseWhitespace: false,\n    useTabs: false\n  });\n  let comments = [];\n  const ast = options.parser.parse(sourceWithoutTabs, {\n    jsx: true,\n    loc: true,\n    locations: true,\n    range: options.range,\n    comment: true,\n    onComment: comments,\n    tolerant: getOption(options, \"tolerant\", true),\n    ecmaVersion: 6,\n    sourceType: getOption(options, \"sourceType\", \"module\")\n  });\n  const tokens = Array.isArray(ast.tokens) ? ast.tokens : false;\n  delete ast.tokens;\n  tokens.forEach(function(token) {\n    if (typeof token.value !== \"string\") {\n      token.value = lines.sliceString(token.loc.start, token.loc.end);\n    }\n  });\n  if (Array.isArray(ast.comments)) {\n    comments = ast.comments;\n    delete ast.comments;\n  }\n  if (ast.loc) {\n    fixFaultyLocations(ast, lines);\n  } else {\n    ast.loc = {\n      start: lines.firstPos(),\n      end: lines.lastPos()\n    };\n  }\n  ast.loc.lines = lines;\n  ast.loc.indent = 0;\n  let file;\n  let program;\n  if (ast.type === \"Program\") {\n    program = ast;\n    file = b$5.file(ast, options.sourceFileName || null);\n    file.loc = {\n      start: lines.firstPos(),\n      end: lines.lastPos(),\n      lines,\n      indent: 0\n    };\n  } else if (ast.type === \"File\") {\n    file = ast;\n    program = file.program;\n  }\n  if (options.tokens) {\n    file.tokens = tokens;\n  }\n  const trueProgramLoc = getTrueLoc(\n    {\n      type: program.type,\n      loc: program.loc,\n      body: [],\n      comments\n    },\n    lines\n  );\n  program.loc.start = trueProgramLoc.start;\n  program.loc.end = trueProgramLoc.end;\n  attach(comments, program.body.length ? file.program : file, lines);\n  return new TreeCopier(lines, tokens).copy(file);\n}\nconst TreeCopier = function TreeCopier2(lines, tokens) {\n  this.lines = lines;\n  this.tokens = tokens;\n  this.startTokenIndex = 0;\n  this.endTokenIndex = tokens.length;\n  this.indent = 0;\n  this.seen = /* @__PURE__ */ new Map();\n};\nconst TCp = TreeCopier.prototype;\nTCp.copy = function(node) {\n  if (this.seen.has(node)) {\n    return this.seen.get(node);\n  }\n  if (isArray$2.check(node)) {\n    const copy2 = new Array(node.length);\n    this.seen.set(node, copy2);\n    node.forEach(function(item, i) {\n      copy2[i] = this.copy(item);\n    }, this);\n    return copy2;\n  }\n  if (!isObject$2.check(node)) {\n    return node;\n  }\n  fixFaultyLocations(node, this.lines);\n  const copy = Object.create(Object.getPrototypeOf(node), {\n    original: {\n      // Provide a link from the copy to the original.\n      value: node,\n      configurable: false,\n      enumerable: false,\n      writable: true\n    }\n  });\n  this.seen.set(node, copy);\n  const loc = node.loc;\n  const oldIndent = this.indent;\n  let newIndent = oldIndent;\n  const oldStartTokenIndex = this.startTokenIndex;\n  const oldEndTokenIndex = this.endTokenIndex;\n  if (loc) {\n    if (node.type === \"Block\" || node.type === \"Line\" || node.type === \"CommentBlock\" || node.type === \"CommentLine\" || this.lines.isPrecededOnlyByWhitespace(loc.start)) {\n      newIndent = this.indent = loc.start.column;\n    }\n    loc.lines = this.lines;\n    loc.tokens = this.tokens;\n    loc.indent = newIndent;\n    this.findTokenRange(loc);\n  }\n  const keys = Object.keys(node);\n  const keyCount = keys.length;\n  for (let i = 0; i < keyCount; ++i) {\n    const key = keys[i];\n    if (key === \"loc\") {\n      copy[key] = node[key];\n    } else if (key === \"tokens\" && node.type === \"File\") {\n      copy[key] = node[key];\n    } else {\n      copy[key] = this.copy(node[key]);\n    }\n  }\n  this.indent = oldIndent;\n  this.startTokenIndex = oldStartTokenIndex;\n  this.endTokenIndex = oldEndTokenIndex;\n  return copy;\n};\nTCp.findTokenRange = function(loc) {\n  while (this.startTokenIndex > 0) {\n    const token = loc.tokens[this.startTokenIndex];\n    if (comparePos(loc.start, token.loc.start) < 0) {\n      --this.startTokenIndex;\n    } else\n      break;\n  }\n  while (this.endTokenIndex < loc.tokens.length) {\n    const token = loc.tokens[this.endTokenIndex];\n    if (comparePos(token.loc.end, loc.end) < 0) {\n      ++this.endTokenIndex;\n    } else\n      break;\n  }\n  while (this.startTokenIndex < this.endTokenIndex) {\n    const token = loc.tokens[this.startTokenIndex];\n    if (comparePos(token.loc.start, loc.start) < 0) {\n      ++this.startTokenIndex;\n    } else\n      break;\n  }\n  loc.start.token = this.startTokenIndex;\n  while (this.endTokenIndex > this.startTokenIndex) {\n    const token = loc.tokens[this.endTokenIndex - 1];\n    if (comparePos(loc.end, token.loc.end) < 0) {\n      --this.endTokenIndex;\n    } else\n      break;\n  }\n  loc.end.token = this.endTokenIndex;\n};\n\nconst n = namedTypes$1;\nconst isArray$1 = builtInTypes.array;\nconst isNumber = builtInTypes.number;\nconst PRECEDENCE = {};\n[\n  [\"??\"],\n  [\"||\"],\n  [\"&&\"],\n  [\"|\"],\n  [\"^\"],\n  [\"&\"],\n  [\"==\", \"===\", \"!=\", \"!==\"],\n  [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n  [\">>\", \"<<\", \">>>\"],\n  [\"+\", \"-\"],\n  [\"*\", \"/\", \"%\"],\n  [\"**\"]\n].forEach(function(tier, i) {\n  tier.forEach(function(op) {\n    PRECEDENCE[op] = i;\n  });\n});\nconst FastPath = function FastPath2(value) {\n  this.stack = [value];\n};\nconst FPp = FastPath.prototype;\nFastPath.from = function(obj) {\n  if (obj instanceof FastPath) {\n    return obj.copy();\n  }\n  if (obj instanceof NodePath) {\n    const copy2 = Object.create(FastPath.prototype);\n    const stack = [obj.value];\n    for (let pp; pp = obj.parentPath; obj = pp)\n      stack.push(obj.name, pp.value);\n    copy2.stack = stack.reverse();\n    return copy2;\n  }\n  return new FastPath(obj);\n};\nFPp.copy = function copy() {\n  const copy2 = Object.create(FastPath.prototype);\n  copy2.stack = this.stack.slice(0);\n  return copy2;\n};\nFPp.getName = function getName() {\n  const s = this.stack;\n  const len = s.length;\n  if (len > 1) {\n    return s[len - 2];\n  }\n  return null;\n};\nFPp.getValue = function getValue() {\n  const s = this.stack;\n  return s[s.length - 1];\n};\nFPp.valueIsDuplicate = function() {\n  const s = this.stack;\n  const valueIndex = s.length - 1;\n  return s.lastIndexOf(s[valueIndex], valueIndex - 1) >= 0;\n};\nfunction getNodeHelper(path, count) {\n  const s = path.stack;\n  for (let i = s.length - 1; i >= 0; i -= 2) {\n    const value = s[i];\n    if (n.Node.check(value) && --count < 0) {\n      return value;\n    }\n  }\n  return null;\n}\nFPp.getNode = function getNode(count = 0) {\n  return getNodeHelper(this, ~~count);\n};\nFPp.getParentNode = function getParentNode(count = 0) {\n  return getNodeHelper(this, ~~count + 1);\n};\nFPp.getRootValue = function getRootValue() {\n  const s = this.stack;\n  if (s.length % 2 === 0) {\n    return s[1];\n  }\n  return s[0];\n};\nFPp.call = function call(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  const result = callback(this);\n  s.length = origLen;\n  return result;\n};\nFPp.each = function each(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      callback(this);\n      s.length -= 2;\n    }\n  }\n  s.length = origLen;\n};\nFPp.map = function map(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  const result = new Array(value.length);\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      result[i] = callback(this, i);\n      s.length -= 2;\n    }\n  }\n  s.length = origLen;\n  return result;\n};\nFPp.hasParens = function() {\n  const node = this.getNode();\n  const prevToken = this.getPrevToken(node);\n  if (!prevToken) {\n    return false;\n  }\n  const nextToken = this.getNextToken(node);\n  if (!nextToken) {\n    return false;\n  }\n  if (prevToken.value === \"(\") {\n    if (nextToken.value === \")\") {\n      return true;\n    }\n    const justNeedsOpeningParen = !this.canBeFirstInStatement() && this.firstInStatement() && !this.needsParens(true);\n    if (justNeedsOpeningParen) {\n      return true;\n    }\n  }\n  return false;\n};\nFPp.getPrevToken = function(node) {\n  node = node || this.getNode();\n  const loc = node && node.loc;\n  const tokens = loc && loc.tokens;\n  if (tokens && loc.start.token > 0) {\n    const token = tokens[loc.start.token - 1];\n    if (token) {\n      const rootLoc = this.getRootValue().loc;\n      if (comparePos(rootLoc.start, token.loc.start) <= 0) {\n        return token;\n      }\n    }\n  }\n  return null;\n};\nFPp.getNextToken = function(node) {\n  node = node || this.getNode();\n  const loc = node && node.loc;\n  const tokens = loc && loc.tokens;\n  if (tokens && loc.end.token < tokens.length) {\n    const token = tokens[loc.end.token];\n    if (token) {\n      const rootLoc = this.getRootValue().loc;\n      if (comparePos(token.loc.end, rootLoc.end) <= 0) {\n        return token;\n      }\n    }\n  }\n  return null;\n};\nFPp.needsParens = function(assumeExpressionContext) {\n  const node = this.getNode();\n  if (node.type === \"AssignmentExpression\" && node.left.type === \"ObjectPattern\") {\n    return true;\n  }\n  const parent = this.getParentNode();\n  const name = this.getName();\n  if (this.getValue() !== node) {\n    return false;\n  }\n  if (n.Statement.check(node)) {\n    return false;\n  }\n  if (node.type === \"Identifier\") {\n    return false;\n  }\n  if (parent && parent.type === \"ParenthesizedExpression\") {\n    return false;\n  }\n  if (node.extra && node.extra.parenthesized) {\n    return true;\n  }\n  if (!parent)\n    return false;\n  if (node.type === \"UnaryExpression\" && parent.type === \"BinaryExpression\" && name === \"left\" && parent.left === node && parent.operator === \"**\") {\n    return true;\n  }\n  switch (node.type) {\n    case \"UnaryExpression\":\n    case \"SpreadElement\":\n    case \"SpreadProperty\":\n      return parent.type === \"MemberExpression\" && name === \"object\" && parent.object === node;\n    case \"BinaryExpression\":\n    case \"LogicalExpression\":\n      switch (parent.type) {\n        case \"CallExpression\":\n          return name === \"callee\" && parent.callee === node;\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n          return true;\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n        case \"BinaryExpression\":\n        case \"LogicalExpression\": {\n          const po = parent.operator;\n          const pp = PRECEDENCE[po];\n          const no = node.operator;\n          const np = PRECEDENCE[no];\n          if (pp > np) {\n            return true;\n          }\n          if (pp === np && name === \"right\") {\n            return true;\n          }\n          break;\n        }\n        default:\n          return false;\n      }\n      break;\n    case \"SequenceExpression\":\n      switch (parent.type) {\n        case \"ReturnStatement\":\n          return false;\n        case \"ForStatement\":\n          return false;\n        case \"ExpressionStatement\":\n          return name !== \"expression\";\n        default:\n          return true;\n      }\n    case \"OptionalIndexedAccessType\":\n      return node.optional && parent.type === \"IndexedAccessType\";\n    case \"IntersectionTypeAnnotation\":\n    case \"UnionTypeAnnotation\":\n      return parent.type === \"NullableTypeAnnotation\";\n    case \"Literal\":\n      return parent.type === \"MemberExpression\" && isNumber.check(node.value) && name === \"object\" && parent.object === node;\n    case \"NumericLiteral\":\n      return parent.type === \"MemberExpression\" && name === \"object\" && parent.object === node;\n    case \"YieldExpression\":\n    case \"AwaitExpression\":\n    case \"AssignmentExpression\":\n    case \"ConditionalExpression\":\n      switch (parent.type) {\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n        case \"BinaryExpression\":\n        case \"LogicalExpression\":\n          return true;\n        case \"CallExpression\":\n        case \"NewExpression\":\n          return name === \"callee\" && parent.callee === node;\n        case \"ConditionalExpression\":\n          return name === \"test\" && parent.test === node;\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n        default:\n          return false;\n      }\n    case \"ArrowFunctionExpression\":\n      if (n.CallExpression.check(parent) && name === \"callee\" && parent.callee === node) {\n        return true;\n      }\n      if (n.MemberExpression.check(parent) && name === \"object\" && parent.object === node) {\n        return true;\n      }\n      if (n.TSAsExpression && n.TSAsExpression.check(parent) && name === \"expression\" && parent.expression === node) {\n        return true;\n      }\n      return isBinary(parent);\n    case \"ObjectExpression\":\n      if (parent.type === \"ArrowFunctionExpression\" && name === \"body\" && parent.body === node) {\n        return true;\n      }\n      break;\n    case \"TSAsExpression\":\n      if (parent.type === \"ArrowFunctionExpression\" && name === \"body\" && parent.body === node && node.expression.type === \"ObjectExpression\") {\n        return true;\n      }\n      break;\n    case \"CallExpression\":\n      if (name === \"declaration\" && n.ExportDefaultDeclaration.check(parent) && n.FunctionExpression.check(node.callee)) {\n        return true;\n      }\n  }\n  if (parent.type === \"NewExpression\" && name === \"callee\" && parent.callee === node) {\n    return containsCallExpression(node);\n  }\n  if (assumeExpressionContext !== true && !this.canBeFirstInStatement() && this.firstInStatement()) {\n    return true;\n  }\n  return false;\n};\nfunction isBinary(node) {\n  return n.BinaryExpression.check(node) || n.LogicalExpression.check(node);\n}\nfunction containsCallExpression(node) {\n  if (n.CallExpression.check(node)) {\n    return true;\n  }\n  if (isArray$1.check(node)) {\n    return node.some(containsCallExpression);\n  }\n  if (n.Node.check(node)) {\n    return someField(\n      node,\n      (_name, child) => containsCallExpression(child)\n    );\n  }\n  return false;\n}\nFPp.canBeFirstInStatement = function() {\n  const node = this.getNode();\n  if (n.FunctionExpression.check(node)) {\n    return false;\n  }\n  if (n.ObjectExpression.check(node)) {\n    return false;\n  }\n  if (n.ClassExpression.check(node)) {\n    return false;\n  }\n  return true;\n};\nFPp.firstInStatement = function() {\n  const s = this.stack;\n  let parentName, parent;\n  let childName, child;\n  for (let i = s.length - 1; i >= 0; i -= 2) {\n    if (n.Node.check(s[i])) {\n      childName = parentName;\n      child = parent;\n      parentName = s[i - 1];\n      parent = s[i];\n    }\n    if (!parent || !child) {\n      continue;\n    }\n    if (n.BlockStatement.check(parent) && parentName === \"body\" && childName === 0) {\n      return true;\n    }\n    if (n.ExpressionStatement.check(parent) && childName === \"expression\") {\n      return true;\n    }\n    if (n.AssignmentExpression.check(parent) && childName === \"left\") {\n      return true;\n    }\n    if (n.ArrowFunctionExpression.check(parent) && childName === \"body\") {\n      return true;\n    }\n    if (n.SequenceExpression.check(parent) && s[i + 1] === \"expressions\" && childName === 0) {\n      continue;\n    }\n    if (n.CallExpression.check(parent) && childName === \"callee\") {\n      continue;\n    }\n    if (n.MemberExpression.check(parent) && childName === \"object\") {\n      continue;\n    }\n    if (n.ConditionalExpression.check(parent) && childName === \"test\") {\n      continue;\n    }\n    if (isBinary(parent) && childName === \"left\") {\n      continue;\n    }\n    if (n.UnaryExpression.check(parent) && !parent.prefix && childName === \"argument\") {\n      continue;\n    }\n    return false;\n  }\n  return true;\n};\n\nconst Printable = namedTypes$1.Printable;\nconst Expression = namedTypes$1.Expression;\nconst ReturnStatement = namedTypes$1.ReturnStatement;\nconst SourceLocation = namedTypes$1.SourceLocation;\nconst isObject$1 = builtInTypes.object;\nconst isArray = builtInTypes.array;\nconst isString$1 = builtInTypes.string;\nconst riskyAdjoiningCharExp = /[0-9a-z_$]/i;\nconst Patcher = function Patcher2(lines) {\n  const self = this, replacements = [];\n  self.replace = function(loc, lines2) {\n    if (isString$1.check(lines2))\n      lines2 = fromString(lines2);\n    replacements.push({\n      lines: lines2,\n      start: loc.start,\n      end: loc.end\n    });\n  };\n  self.get = function(loc) {\n    loc = loc || {\n      start: { line: 1, column: 0 },\n      end: { line: lines.length, column: lines.getLineLength(lines.length) }\n    };\n    let sliceFrom = loc.start, toConcat = [];\n    function pushSlice(from, to) {\n      toConcat.push(lines.slice(from, to));\n    }\n    replacements.sort((a, b) => comparePos(a.start, b.start)).forEach(function(rep) {\n      if (comparePos(sliceFrom, rep.start) > 0) ; else {\n        pushSlice(sliceFrom, rep.start);\n        toConcat.push(rep.lines);\n        sliceFrom = rep.end;\n      }\n    });\n    pushSlice(sliceFrom, loc.end);\n    return concat(toConcat);\n  };\n};\nconst Pp = Patcher.prototype;\nPp.tryToReprintComments = function(newNode, oldNode, print) {\n  const patcher = this;\n  if (!newNode.comments && !oldNode.comments) {\n    return true;\n  }\n  const newPath = FastPath.from(newNode);\n  const oldPath = FastPath.from(oldNode);\n  newPath.stack.push(\"comments\", getSurroundingComments(newNode));\n  oldPath.stack.push(\"comments\", getSurroundingComments(oldNode));\n  const reprints = [];\n  const ableToReprintComments = findArrayReprints(newPath, oldPath, reprints);\n  if (ableToReprintComments && reprints.length > 0) {\n    reprints.forEach(function(reprint) {\n      const oldComment = reprint.oldPath.getValue();\n      patcher.replace(\n        oldComment.loc,\n        // Comments can't have .comments, so it doesn't matter whether we\n        // print with comments or without.\n        print(reprint.newPath).indentTail(oldComment.loc.indent)\n      );\n    });\n  }\n  return ableToReprintComments;\n};\nfunction getSurroundingComments(node) {\n  const result = [];\n  if (node.comments && node.comments.length > 0) {\n    node.comments.forEach(function(comment) {\n      if (comment.leading || comment.trailing) {\n        result.push(comment);\n      }\n    });\n  }\n  return result;\n}\nPp.deleteComments = function(node) {\n  if (!node.comments) {\n    return;\n  }\n  const patcher = this;\n  node.comments.forEach(function(comment) {\n    if (comment.leading) {\n      patcher.replace(\n        {\n          start: comment.loc.start,\n          end: node.loc.lines.skipSpaces(comment.loc.end, false, false)\n        },\n        \"\"\n      );\n    } else if (comment.trailing) {\n      patcher.replace(\n        {\n          start: node.loc.lines.skipSpaces(comment.loc.start, true, false),\n          end: comment.loc.end\n        },\n        \"\"\n      );\n    }\n  });\n};\nfunction getReprinter(path) {\n  const node = path.getValue();\n  if (!Printable.check(node))\n    return;\n  const orig = node.original;\n  const origLoc = orig && orig.loc;\n  const lines = origLoc && origLoc.lines;\n  const reprints = [];\n  if (!lines || !findReprints(path, reprints))\n    return;\n  return function(print) {\n    const patcher = new Patcher(lines);\n    reprints.forEach(function(reprint) {\n      const newNode = reprint.newPath.getValue();\n      const oldNode = reprint.oldPath.getValue();\n      SourceLocation.assert(oldNode.loc, true);\n      const needToPrintNewPathWithComments = !patcher.tryToReprintComments(\n        newNode,\n        oldNode,\n        print\n      );\n      if (needToPrintNewPathWithComments) {\n        patcher.deleteComments(oldNode);\n      }\n      let newLines = print(reprint.newPath, {\n        includeComments: needToPrintNewPathWithComments,\n        // If the oldNode we're replacing already had parentheses, we may\n        // not need to print the new node with any extra parentheses,\n        // because the existing parentheses will suffice. However, if the\n        // newNode has a different type than the oldNode, let the printer\n        // decide if reprint.newPath needs parentheses, as usual.\n        avoidRootParens: oldNode.type === newNode.type && reprint.oldPath.hasParens()\n      }).indentTail(oldNode.loc.indent);\n      const nls = needsLeadingSpace(lines, oldNode.loc, newLines);\n      const nts = needsTrailingSpace(lines, oldNode.loc, newLines);\n      if (nls || nts) {\n        const newParts = [];\n        nls && newParts.push(\" \");\n        newParts.push(newLines);\n        nts && newParts.push(\" \");\n        newLines = concat(newParts);\n      }\n      patcher.replace(oldNode.loc, newLines);\n    });\n    const patchedLines = patcher.get(origLoc).indentTail(-orig.loc.indent);\n    if (path.needsParens()) {\n      return concat([\"(\", patchedLines, \")\"]);\n    }\n    return patchedLines;\n  };\n}\nfunction needsLeadingSpace(oldLines, oldLoc, newLines) {\n  const posBeforeOldLoc = copyPos(oldLoc.start);\n  const charBeforeOldLoc = oldLines.prevPos(posBeforeOldLoc) && oldLines.charAt(posBeforeOldLoc);\n  const newFirstChar = newLines.charAt(newLines.firstPos());\n  return charBeforeOldLoc && riskyAdjoiningCharExp.test(charBeforeOldLoc) && newFirstChar && riskyAdjoiningCharExp.test(newFirstChar);\n}\nfunction needsTrailingSpace(oldLines, oldLoc, newLines) {\n  const charAfterOldLoc = oldLines.charAt(oldLoc.end);\n  const newLastPos = newLines.lastPos();\n  const newLastChar = newLines.prevPos(newLastPos) && newLines.charAt(newLastPos);\n  return newLastChar && riskyAdjoiningCharExp.test(newLastChar) && charAfterOldLoc && riskyAdjoiningCharExp.test(charAfterOldLoc);\n}\nfunction findReprints(newPath, reprints) {\n  const newNode = newPath.getValue();\n  Printable.assert(newNode);\n  const oldNode = newNode.original;\n  Printable.assert(oldNode);\n  if (newNode.type !== oldNode.type) {\n    return false;\n  }\n  const oldPath = new FastPath(oldNode);\n  const canReprint = findChildReprints(newPath, oldPath, reprints);\n  if (!canReprint) {\n    reprints.length = 0;\n  }\n  return canReprint;\n}\nfunction findAnyReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  if (newNode === oldNode)\n    return true;\n  if (isArray.check(newNode))\n    return findArrayReprints(newPath, oldPath, reprints);\n  if (isObject$1.check(newNode))\n    return findObjectReprints(newPath, oldPath, reprints);\n  return false;\n}\nfunction findArrayReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  if (newNode === oldNode || newPath.valueIsDuplicate() || oldPath.valueIsDuplicate()) {\n    return true;\n  }\n  isArray.assert(newNode);\n  const len = newNode.length;\n  if (!(isArray.check(oldNode) && oldNode.length === len))\n    return false;\n  for (let i = 0; i < len; ++i) {\n    newPath.stack.push(i, newNode[i]);\n    oldPath.stack.push(i, oldNode[i]);\n    const canReprint = findAnyReprints(newPath, oldPath, reprints);\n    newPath.stack.length -= 2;\n    oldPath.stack.length -= 2;\n    if (!canReprint) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction findObjectReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  isObject$1.assert(newNode);\n  if (newNode.original === null) {\n    return false;\n  }\n  const oldNode = oldPath.getValue();\n  if (!isObject$1.check(oldNode))\n    return false;\n  if (newNode === oldNode || newPath.valueIsDuplicate() || oldPath.valueIsDuplicate()) {\n    return true;\n  }\n  if (Printable.check(newNode)) {\n    if (!Printable.check(oldNode)) {\n      return false;\n    }\n    const newParentNode = newPath.getParentNode();\n    const oldParentNode = oldPath.getParentNode();\n    if (oldParentNode !== null && oldParentNode.type === \"FunctionTypeAnnotation\" && newParentNode !== null && newParentNode.type === \"FunctionTypeAnnotation\") {\n      const oldNeedsParens = oldParentNode.params.length !== 1 || !!oldParentNode.params[0].name;\n      const newNeedParens = newParentNode.params.length !== 1 || !!newParentNode.params[0].name;\n      if (!oldNeedsParens && newNeedParens) {\n        return false;\n      }\n    }\n    if (newNode.type === oldNode.type) {\n      const childReprints = [];\n      if (findChildReprints(newPath, oldPath, childReprints)) {\n        reprints.push.apply(reprints, childReprints);\n      } else if (oldNode.loc) {\n        reprints.push({\n          oldPath: oldPath.copy(),\n          newPath: newPath.copy()\n        });\n      } else {\n        return false;\n      }\n      return true;\n    }\n    if (Expression.check(newNode) && Expression.check(oldNode) && // If we have no .loc information for oldNode, then we won't be\n    // able to reprint it.\n    oldNode.loc) {\n      reprints.push({\n        oldPath: oldPath.copy(),\n        newPath: newPath.copy()\n      });\n      return true;\n    }\n    return false;\n  }\n  return findChildReprints(newPath, oldPath, reprints);\n}\nfunction findChildReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  isObject$1.assert(newNode);\n  isObject$1.assert(oldNode);\n  if (newNode.original === null) {\n    return false;\n  }\n  if (newPath.needsParens() && !oldPath.hasParens()) {\n    return false;\n  }\n  const keys = getUnionOfKeys(oldNode, newNode);\n  if (oldNode.type === \"File\" || newNode.type === \"File\") {\n    delete keys.tokens;\n  }\n  delete keys.loc;\n  const originalReprintCount = reprints.length;\n  for (let k in keys) {\n    if (k.charAt(0) === \"_\") {\n      continue;\n    }\n    newPath.stack.push(k, getFieldValue(newNode, k));\n    oldPath.stack.push(k, getFieldValue(oldNode, k));\n    const canReprint = findAnyReprints(newPath, oldPath, reprints);\n    newPath.stack.length -= 2;\n    oldPath.stack.length -= 2;\n    if (!canReprint) {\n      return false;\n    }\n  }\n  if (ReturnStatement.check(newPath.getNode()) && reprints.length > originalReprintCount) {\n    return false;\n  }\n  return true;\n}\n\nconst namedTypes = namedTypes$1;\nconst isString = builtInTypes.string;\nconst isObject = builtInTypes.object;\nconst PrintResult = function PrintResult2(code, sourceMap) {\n  isString.assert(code);\n  this.code = code;\n  if (sourceMap) {\n    isObject.assert(sourceMap);\n    this.map = sourceMap;\n  }\n};\nconst PRp = PrintResult.prototype;\nlet warnedAboutToString = false;\nPRp.toString = function() {\n  if (!warnedAboutToString) {\n    console.warn(\n      \"Deprecation warning: recast.print now returns an object with a .code property. You appear to be treating the object as a string, which might still work but is strongly discouraged.\"\n    );\n    warnedAboutToString = true;\n  }\n  return this.code;\n};\nconst emptyPrintResult = new PrintResult(\"\");\nconst Printer = function Printer2(config) {\n  const explicitTabWidth = config && config.tabWidth;\n  config = normalize(config);\n  config.sourceFileName = null;\n  function makePrintFunctionWith(options, overrides) {\n    options = Object.assign({}, options, overrides);\n    return (path) => print(path, options);\n  }\n  function print(path, options) {\n    options = options || {};\n    if (options.includeComments) {\n      return printComments(\n        path,\n        makePrintFunctionWith(options, {\n          includeComments: false\n        })\n      );\n    }\n    const oldTabWidth = config.tabWidth;\n    if (!explicitTabWidth) {\n      const loc = path.getNode().loc;\n      if (loc && loc.lines && loc.lines.guessTabWidth) {\n        config.tabWidth = loc.lines.guessTabWidth();\n      }\n    }\n    const reprinter = getReprinter(path);\n    const lines = reprinter ? (\n      // Since the print function that we pass to the reprinter will\n      // be used to print \"new\" nodes, it's tempting to think we\n      // should pass printRootGenerically instead of print, to avoid\n      // calling maybeReprint again, but that would be a mistake\n      // because the new nodes might not be entirely new, but merely\n      // moved from elsewhere in the AST. The print function is the\n      // right choice because it gives us the opportunity to reprint\n      // such nodes using their original source.\n      reprinter(print)\n    ) : genericPrint(\n      path,\n      config,\n      options,\n      makePrintFunctionWith(options, {\n        includeComments: true,\n        avoidRootParens: false\n      })\n    );\n    config.tabWidth = oldTabWidth;\n    return lines;\n  }\n  this.print = function(ast) {\n    if (!ast) {\n      return emptyPrintResult;\n    }\n    const lines = print(FastPath.from(ast), {\n      includeComments: true,\n      avoidRootParens: false\n    });\n    return new PrintResult(\n      lines.toString(config),\n      composeSourceMaps(\n        config.inputSourceMap,\n        lines.getSourceMap(config.sourceMapName, config.sourceRoot)\n      )\n    );\n  };\n  this.printGenerically = function(ast) {\n    if (!ast) {\n      return emptyPrintResult;\n    }\n    function printGenerically(path2) {\n      return printComments(\n        path2,\n        (path3) => genericPrint(\n          path3,\n          config,\n          {\n            includeComments: true,\n            avoidRootParens: false\n          },\n          printGenerically\n        )\n      );\n    }\n    const path = FastPath.from(ast);\n    const oldReuseWhitespace = config.reuseWhitespace;\n    config.reuseWhitespace = false;\n    const pr = new PrintResult(printGenerically(path).toString(config));\n    config.reuseWhitespace = oldReuseWhitespace;\n    return pr;\n  };\n};\nfunction genericPrint(path, config, options, printPath) {\n  const node = path.getValue();\n  const parts = [];\n  const linesWithoutParens = genericPrintNoParens(path, config, printPath);\n  if (!node || linesWithoutParens.isEmpty()) {\n    return linesWithoutParens;\n  }\n  let shouldAddParens = false;\n  const decoratorsLines = printDecorators(path, printPath);\n  if (decoratorsLines.isEmpty()) {\n    if (!options.avoidRootParens) {\n      shouldAddParens = path.needsParens();\n    }\n  } else {\n    parts.push(decoratorsLines);\n  }\n  if (shouldAddParens) {\n    parts.unshift(\"(\");\n  }\n  parts.push(linesWithoutParens);\n  if (shouldAddParens) {\n    parts.push(\")\");\n  }\n  return concat(parts);\n}\nfunction genericPrintNoParens(path, options, print) {\n  const n = path.getValue();\n  if (!n) {\n    return fromString(\"\");\n  }\n  if (typeof n === \"string\") {\n    return fromString(n, options);\n  }\n  namedTypes.Printable.assert(n);\n  const parts = [];\n  switch (n.type) {\n    case \"File\":\n      return path.call(print, \"program\");\n    case \"Program\":\n      if (n.directives) {\n        path.each(function(childPath) {\n          parts.push(print(childPath), \";\\n\");\n        }, \"directives\");\n      }\n      if (n.interpreter) {\n        parts.push(path.call(print, \"interpreter\"));\n      }\n      parts.push(\n        path.call(\n          (bodyPath) => printStatementSequence(bodyPath, options, print),\n          \"body\"\n        )\n      );\n      return concat(parts);\n    case \"Noop\":\n    case \"EmptyStatement\":\n      return fromString(\"\");\n    case \"ExpressionStatement\":\n      return concat([path.call(print, \"expression\"), \";\"]);\n    case \"ParenthesizedExpression\":\n      return concat([\"(\", path.call(print, \"expression\"), \")\"]);\n    case \"BinaryExpression\":\n    case \"LogicalExpression\":\n    case \"AssignmentExpression\":\n      return fromString(\" \").join([\n        path.call(print, \"left\"),\n        n.operator,\n        path.call(print, \"right\")\n      ]);\n    case \"AssignmentPattern\":\n      return concat([\n        path.call(print, \"left\"),\n        \" = \",\n        path.call(print, \"right\")\n      ]);\n    case \"MemberExpression\":\n    case \"OptionalMemberExpression\": {\n      parts.push(path.call(print, \"object\"));\n      const property = path.call(print, \"property\");\n      const optional = getFieldValue(n, \"optional\");\n      if (n.computed) {\n        parts.push(optional ? \"?.[\" : \"[\", property, \"]\");\n      } else {\n        parts.push(optional ? \"?.\" : \".\", property);\n      }\n      return concat(parts);\n    }\n    case \"ChainExpression\":\n      return path.call(print, \"expression\");\n    case \"MetaProperty\":\n      return concat([\n        path.call(print, \"meta\"),\n        \".\",\n        path.call(print, \"property\")\n      ]);\n    case \"BindExpression\":\n      if (n.object) {\n        parts.push(path.call(print, \"object\"));\n      }\n      parts.push(\"::\", path.call(print, \"callee\"));\n      return concat(parts);\n    case \"Path\":\n      return fromString(\".\").join(n.body);\n    case \"Identifier\":\n      return concat([\n        fromString(n.name, options),\n        n.optional ? \"?\" : \"\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"SpreadElement\":\n    case \"SpreadElementPattern\":\n    case \"RestProperty\":\n    case \"SpreadProperty\":\n    case \"SpreadPropertyPattern\":\n    case \"ObjectTypeSpreadProperty\":\n    case \"RestElement\":\n      return concat([\n        \"...\",\n        path.call(print, \"argument\"),\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n    case \"TSDeclareFunction\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      if (n.async) {\n        parts.push(\"async \");\n      }\n      parts.push(\"function\");\n      if (n.generator)\n        parts.push(\"*\");\n      if (n.id) {\n        parts.push(\n          \" \",\n          path.call(print, \"id\"),\n          path.call(print, \"typeParameters\")\n        );\n      } else {\n        if (n.typeParameters) {\n          parts.push(path.call(print, \"typeParameters\"));\n        }\n      }\n      parts.push(\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"returnType\")\n      );\n      if (n.body) {\n        parts.push(\" \", path.call(print, \"body\"));\n      }\n      return concat(parts);\n    case \"ArrowFunctionExpression\":\n      if (n.async) {\n        parts.push(\"async \");\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (!options.arrowParensAlways && n.params.length === 1 && !n.rest && n.params[0].type === \"Identifier\" && !n.params[0].typeAnnotation && !n.returnType) {\n        parts.push(path.call(print, \"params\", 0));\n      } else {\n        parts.push(\n          \"(\",\n          printFunctionParams(path, options, print),\n          \")\",\n          path.call(print, \"returnType\")\n        );\n      }\n      parts.push(\" => \", path.call(print, \"body\"));\n      return concat(parts);\n    case \"MethodDefinition\":\n      return printMethod(path, options, print);\n    case \"YieldExpression\":\n      parts.push(\"yield\");\n      if (n.delegate)\n        parts.push(\"*\");\n      if (n.argument)\n        parts.push(\" \", path.call(print, \"argument\"));\n      return concat(parts);\n    case \"AwaitExpression\":\n      parts.push(\"await\");\n      if (n.all)\n        parts.push(\"*\");\n      if (n.argument)\n        parts.push(\" \", path.call(print, \"argument\"));\n      return concat(parts);\n    case \"ModuleExpression\":\n      return concat([\n        \"module {\\n\",\n        path.call(print, \"body\").indent(options.tabWidth),\n        \"\\n}\"\n      ]);\n    case \"ModuleDeclaration\":\n      parts.push(\"module\", path.call(print, \"id\"));\n      if (n.source) {\n        parts.push(\"from\", path.call(print, \"source\"));\n      } else {\n        parts.push(path.call(print, \"body\"));\n      }\n      return fromString(\" \").join(parts);\n    case \"ImportSpecifier\":\n      if (n.importKind && n.importKind !== \"value\") {\n        parts.push(n.importKind + \" \");\n      }\n      if (n.imported) {\n        parts.push(path.call(print, \"imported\"));\n        if (n.local && n.local.name !== n.imported.name) {\n          parts.push(\" as \", path.call(print, \"local\"));\n        }\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n        if (n.name) {\n          parts.push(\" as \", path.call(print, \"name\"));\n        }\n      }\n      return concat(parts);\n    case \"ExportSpecifier\":\n      if (n.exportKind && n.exportKind !== \"value\") {\n        parts.push(n.exportKind + \" \");\n      }\n      if (n.local) {\n        parts.push(path.call(print, \"local\"));\n        if (n.exported && n.exported.name !== n.local.name) {\n          parts.push(\" as \", path.call(print, \"exported\"));\n        }\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n        if (n.name) {\n          parts.push(\" as \", path.call(print, \"name\"));\n        }\n      }\n      return concat(parts);\n    case \"ExportBatchSpecifier\":\n      return fromString(\"*\");\n    case \"ImportNamespaceSpecifier\":\n      parts.push(\"* as \");\n      if (n.local) {\n        parts.push(path.call(print, \"local\"));\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n      }\n      return concat(parts);\n    case \"ImportDefaultSpecifier\":\n      if (n.local) {\n        return path.call(print, \"local\");\n      }\n      return path.call(print, \"id\");\n    case \"TSExportAssignment\":\n      return concat([\"export = \", path.call(print, \"expression\")]);\n    case \"ExportDeclaration\":\n    case \"ExportDefaultDeclaration\":\n    case \"ExportNamedDeclaration\":\n      return printExportDeclaration(path, options, print);\n    case \"ExportAllDeclaration\":\n      parts.push(\"export *\");\n      if (n.exported) {\n        parts.push(\" as \", path.call(print, \"exported\"));\n      }\n      parts.push(\" from \", path.call(print, \"source\"), \";\");\n      return concat(parts);\n    case \"TSNamespaceExportDeclaration\":\n      parts.push(\"export as namespace \", path.call(print, \"id\"));\n      return maybeAddSemicolon(concat(parts));\n    case \"ExportNamespaceSpecifier\":\n      return concat([\"* as \", path.call(print, \"exported\")]);\n    case \"ExportDefaultSpecifier\":\n      return path.call(print, \"exported\");\n    case \"Import\":\n      return fromString(\"import\", options);\n    case \"ImportExpression\":\n      return concat([\"import(\", path.call(print, \"source\"), \")\"]);\n    case \"ImportDeclaration\": {\n      parts.push(\"import \");\n      if (n.importKind && n.importKind !== \"value\") {\n        parts.push(n.importKind + \" \");\n      }\n      if (n.specifiers && n.specifiers.length > 0) {\n        const unbracedSpecifiers = [];\n        const bracedSpecifiers = [];\n        path.each(function(specifierPath) {\n          const spec = specifierPath.getValue();\n          if (spec.type === \"ImportSpecifier\") {\n            bracedSpecifiers.push(print(specifierPath));\n          } else if (spec.type === \"ImportDefaultSpecifier\" || spec.type === \"ImportNamespaceSpecifier\") {\n            unbracedSpecifiers.push(print(specifierPath));\n          }\n        }, \"specifiers\");\n        unbracedSpecifiers.forEach((lines, i) => {\n          if (i > 0) {\n            parts.push(\", \");\n          }\n          parts.push(lines);\n        });\n        if (bracedSpecifiers.length > 0) {\n          let lines = fromString(\", \").join(bracedSpecifiers);\n          if (lines.getLineLength(1) > options.wrapColumn) {\n            lines = concat([\n              fromString(\",\\n\").join(bracedSpecifiers).indent(options.tabWidth),\n              \",\"\n            ]);\n          }\n          if (unbracedSpecifiers.length > 0) {\n            parts.push(\", \");\n          }\n          if (lines.length > 1) {\n            parts.push(\"{\\n\", lines, \"\\n}\");\n          } else if (options.objectCurlySpacing) {\n            parts.push(\"{ \", lines, \" }\");\n          } else {\n            parts.push(\"{\", lines, \"}\");\n          }\n        }\n        parts.push(\" from \");\n      }\n      parts.push(\n        path.call(print, \"source\"),\n        maybePrintImportAssertions(path, options, print),\n        \";\"\n      );\n      return concat(parts);\n    }\n    case \"ImportAttribute\":\n      return concat([path.call(print, \"key\"), \": \", path.call(print, \"value\")]);\n    case \"StaticBlock\":\n      parts.push(\"static \");\n    case \"BlockStatement\": {\n      const naked = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      if (naked.isEmpty()) {\n        if (!n.directives || n.directives.length === 0) {\n          parts.push(\"{}\");\n          return concat(parts);\n        }\n      }\n      parts.push(\"{\\n\");\n      if (n.directives) {\n        path.each(function(childPath) {\n          parts.push(\n            maybeAddSemicolon(print(childPath).indent(options.tabWidth)),\n            n.directives.length > 1 || !naked.isEmpty() ? \"\\n\" : \"\"\n          );\n        }, \"directives\");\n      }\n      parts.push(naked.indent(options.tabWidth));\n      parts.push(\"\\n}\");\n      return concat(parts);\n    }\n    case \"ReturnStatement\": {\n      parts.push(\"return\");\n      if (n.argument) {\n        const argLines = path.call(print, \"argument\");\n        if (argLines.startsWithComment() || argLines.length > 1 && namedTypes.JSXElement && namedTypes.JSXElement.check(n.argument)) {\n          parts.push(\" (\\n\", argLines.indent(options.tabWidth), \"\\n)\");\n        } else {\n          parts.push(\" \", argLines);\n        }\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"CallExpression\":\n    case \"OptionalCallExpression\":\n      parts.push(path.call(print, \"callee\"));\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.typeArguments) {\n        parts.push(path.call(print, \"typeArguments\"));\n      }\n      if (getFieldValue(n, \"optional\")) {\n        parts.push(\"?.\");\n      }\n      parts.push(printArgumentsList(path, options, print));\n      return concat(parts);\n    case \"RecordExpression\":\n      parts.push(\"#\");\n    case \"ObjectExpression\":\n    case \"ObjectPattern\":\n    case \"ObjectTypeAnnotation\": {\n      const isTypeAnnotation = n.type === \"ObjectTypeAnnotation\";\n      const separator = options.flowObjectCommas ? \",\" : isTypeAnnotation ? \";\" : \",\";\n      const fields = [];\n      let allowBreak = false;\n      if (isTypeAnnotation) {\n        fields.push(\"indexers\", \"callProperties\");\n        if (n.internalSlots != null) {\n          fields.push(\"internalSlots\");\n        }\n      }\n      fields.push(\"properties\");\n      let len = 0;\n      fields.forEach(function(field) {\n        len += n[field].length;\n      });\n      const oneLine = isTypeAnnotation && len === 1 || len === 0;\n      const leftBrace = n.exact ? \"{|\" : \"{\";\n      const rightBrace = n.exact ? \"|}\" : \"}\";\n      parts.push(oneLine ? leftBrace : leftBrace + \"\\n\");\n      const leftBraceIndex = parts.length - 1;\n      let i = 0;\n      fields.forEach(function(field) {\n        path.each(function(childPath) {\n          let lines = print(childPath);\n          if (!oneLine) {\n            lines = lines.indent(options.tabWidth);\n          }\n          const multiLine = !isTypeAnnotation && lines.length > 1;\n          if (multiLine && allowBreak) {\n            parts.push(\"\\n\");\n          }\n          parts.push(lines);\n          if (i < len - 1) {\n            parts.push(separator + (multiLine ? \"\\n\\n\" : \"\\n\"));\n            allowBreak = !multiLine;\n          } else if (len !== 1 && isTypeAnnotation) {\n            parts.push(separator);\n          } else if (!oneLine && isTrailingCommaEnabled(options, \"objects\") && childPath.getValue().type !== \"RestElement\") {\n            parts.push(separator);\n          }\n          i++;\n        }, field);\n      });\n      if (n.inexact) {\n        const line = fromString(\"...\", options);\n        if (oneLine) {\n          if (len > 0) {\n            parts.push(separator, \" \");\n          }\n          parts.push(line);\n        } else {\n          parts.push(\"\\n\", line.indent(options.tabWidth));\n        }\n      }\n      parts.push(oneLine ? rightBrace : \"\\n\" + rightBrace);\n      if (i !== 0 && oneLine && options.objectCurlySpacing) {\n        parts[leftBraceIndex] = leftBrace + \" \";\n        parts[parts.length - 1] = \" \" + rightBrace;\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      return concat(parts);\n    }\n    case \"PropertyPattern\":\n      return concat([\n        path.call(print, \"key\"),\n        \": \",\n        path.call(print, \"pattern\")\n      ]);\n    case \"ObjectProperty\":\n    case \"Property\": {\n      if (n.method || n.kind === \"get\" || n.kind === \"set\") {\n        return printMethod(path, options, print);\n      }\n      if (n.shorthand && n.value.type === \"AssignmentPattern\") {\n        return path.call(print, \"value\");\n      }\n      const key = path.call(print, \"key\");\n      if (n.computed) {\n        parts.push(\"[\", key, \"]\");\n      } else {\n        parts.push(key);\n      }\n      if (!n.shorthand || n.key.name !== n.value.name) {\n        parts.push(\": \", path.call(print, \"value\"));\n      }\n      return concat(parts);\n    }\n    case \"ClassMethod\":\n    case \"ObjectMethod\":\n    case \"ClassPrivateMethod\":\n    case \"TSDeclareMethod\":\n      return printMethod(path, options, print);\n    case \"PrivateName\":\n      return concat([\"#\", path.call(print, \"id\")]);\n    case \"Decorator\":\n      return concat([\"@\", path.call(print, \"expression\")]);\n    case \"TupleExpression\":\n      parts.push(\"#\");\n    case \"ArrayExpression\":\n    case \"ArrayPattern\": {\n      const elems = n.elements;\n      const len = elems.length;\n      const printed = path.map(print, \"elements\");\n      const joined = fromString(\", \").join(printed);\n      const oneLine = joined.getLineLength(1) <= options.wrapColumn;\n      if (oneLine) {\n        if (options.arrayBracketSpacing) {\n          parts.push(\"[ \");\n        } else {\n          parts.push(\"[\");\n        }\n      } else {\n        parts.push(\"[\\n\");\n      }\n      path.each(function(elemPath) {\n        const i = elemPath.getName();\n        const elem = elemPath.getValue();\n        if (!elem) {\n          parts.push(\",\");\n        } else {\n          let lines = printed[i];\n          if (oneLine) {\n            if (i > 0)\n              parts.push(\" \");\n          } else {\n            lines = lines.indent(options.tabWidth);\n          }\n          parts.push(lines);\n          if (i < len - 1 || !oneLine && isTrailingCommaEnabled(options, \"arrays\"))\n            parts.push(\",\");\n          if (!oneLine)\n            parts.push(\"\\n\");\n        }\n      }, \"elements\");\n      if (oneLine && options.arrayBracketSpacing) {\n        parts.push(\" ]\");\n      } else {\n        parts.push(\"]\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      return concat(parts);\n    }\n    case \"SequenceExpression\":\n      return fromString(\", \").join(path.map(print, \"expressions\"));\n    case \"ThisExpression\":\n      return fromString(\"this\");\n    case \"Super\":\n      return fromString(\"super\");\n    case \"NullLiteral\":\n      return fromString(\"null\");\n    case \"RegExpLiteral\":\n      return fromString(\n        getPossibleRaw(n) || `/${n.pattern}/${n.flags || \"\"}`,\n        options\n      );\n    case \"BigIntLiteral\":\n      return fromString(getPossibleRaw(n) || n.value + \"n\", options);\n    case \"NumericLiteral\":\n      return fromString(getPossibleRaw(n) || n.value, options);\n    case \"DecimalLiteral\":\n      return fromString(getPossibleRaw(n) || n.value + \"m\", options);\n    case \"StringLiteral\":\n      return fromString(nodeStr(n.value, options));\n    case \"BooleanLiteral\":\n    case \"Literal\":\n      return fromString(\n        getPossibleRaw(n) || (typeof n.value === \"string\" ? nodeStr(n.value, options) : n.value),\n        options\n      );\n    case \"Directive\":\n      return path.call(print, \"value\");\n    case \"DirectiveLiteral\":\n      return fromString(\n        getPossibleRaw(n) || nodeStr(n.value, options),\n        options\n      );\n    case \"InterpreterDirective\":\n      return fromString(`#!${n.value}\n`, options);\n    case \"ModuleSpecifier\":\n      if (n.local) {\n        throw new Error(\"The ESTree ModuleSpecifier type should be abstract\");\n      }\n      return fromString(nodeStr(n.value, options), options);\n    case \"UnaryExpression\":\n      parts.push(n.operator);\n      if (/[a-z]$/.test(n.operator))\n        parts.push(\" \");\n      parts.push(path.call(print, \"argument\"));\n      return concat(parts);\n    case \"UpdateExpression\":\n      parts.push(path.call(print, \"argument\"), n.operator);\n      if (n.prefix)\n        parts.reverse();\n      return concat(parts);\n    case \"ConditionalExpression\":\n      return concat([\n        path.call(print, \"test\"),\n        \" ? \",\n        path.call(print, \"consequent\"),\n        \" : \",\n        path.call(print, \"alternate\")\n      ]);\n    case \"NewExpression\": {\n      parts.push(\"new \", path.call(print, \"callee\"));\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.typeArguments) {\n        parts.push(path.call(print, \"typeArguments\"));\n      }\n      const args = n.arguments;\n      if (args) {\n        parts.push(printArgumentsList(path, options, print));\n      }\n      return concat(parts);\n    }\n    case \"VariableDeclaration\": {\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      parts.push(n.kind, \" \");\n      let maxLen = 0;\n      const printed = path.map(function(childPath) {\n        const lines = print(childPath);\n        maxLen = Math.max(lines.length, maxLen);\n        return lines;\n      }, \"declarations\");\n      if (maxLen === 1) {\n        parts.push(fromString(\", \").join(printed));\n      } else if (printed.length > 1) {\n        parts.push(\n          fromString(\",\\n\").join(printed).indentTail(n.kind.length + 1)\n        );\n      } else {\n        parts.push(printed[0]);\n      }\n      const parentNode = path.getParentNode();\n      if (!namedTypes.ForStatement.check(parentNode) && !namedTypes.ForInStatement.check(parentNode) && !(namedTypes.ForOfStatement && namedTypes.ForOfStatement.check(parentNode)) && !(namedTypes.ForAwaitStatement && namedTypes.ForAwaitStatement.check(parentNode))) {\n        parts.push(\";\");\n      }\n      return concat(parts);\n    }\n    case \"VariableDeclarator\":\n      return n.init ? fromString(\" = \").join([\n        path.call(print, \"id\"),\n        path.call(print, \"init\")\n      ]) : path.call(print, \"id\");\n    case \"WithStatement\":\n      return concat([\n        \"with (\",\n        path.call(print, \"object\"),\n        \") \",\n        path.call(print, \"body\")\n      ]);\n    case \"IfStatement\": {\n      const con = adjustClause(path.call(print, \"consequent\"), options);\n      parts.push(\"if (\", path.call(print, \"test\"), \")\", con);\n      if (n.alternate)\n        parts.push(\n          endsWithBrace(con) ? \" else\" : \"\\nelse\",\n          adjustClause(path.call(print, \"alternate\"), options)\n        );\n      return concat(parts);\n    }\n    case \"ForStatement\": {\n      const init = path.call(print, \"init\");\n      const sep = init.length > 1 ? \";\\n\" : \"; \";\n      const forParen = \"for (\";\n      const indented = fromString(sep).join([init, path.call(print, \"test\"), path.call(print, \"update\")]).indentTail(forParen.length);\n      const head = concat([forParen, indented, \")\"]);\n      let clause = adjustClause(path.call(print, \"body\"), options);\n      parts.push(head);\n      if (head.length > 1) {\n        parts.push(\"\\n\");\n        clause = clause.trimLeft();\n      }\n      parts.push(clause);\n      return concat(parts);\n    }\n    case \"WhileStatement\":\n      return concat([\n        \"while (\",\n        path.call(print, \"test\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n    case \"ForInStatement\":\n      return concat([\n        n.each ? \"for each (\" : \"for (\",\n        path.call(print, \"left\"),\n        \" in \",\n        path.call(print, \"right\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n    case \"ForOfStatement\":\n    case \"ForAwaitStatement\":\n      parts.push(\"for \");\n      if (n.await || n.type === \"ForAwaitStatement\") {\n        parts.push(\"await \");\n      }\n      parts.push(\n        \"(\",\n        path.call(print, \"left\"),\n        \" of \",\n        path.call(print, \"right\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      );\n      return concat(parts);\n    case \"DoWhileStatement\": {\n      const doBody = concat([\n        \"do\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n      parts.push(doBody);\n      if (endsWithBrace(doBody))\n        parts.push(\" while\");\n      else\n        parts.push(\"\\nwhile\");\n      parts.push(\" (\", path.call(print, \"test\"), \");\");\n      return concat(parts);\n    }\n    case \"DoExpression\": {\n      const statements = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      return concat([\"do {\\n\", statements.indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"BreakStatement\":\n      parts.push(\"break\");\n      if (n.label)\n        parts.push(\" \", path.call(print, \"label\"));\n      parts.push(\";\");\n      return concat(parts);\n    case \"ContinueStatement\":\n      parts.push(\"continue\");\n      if (n.label)\n        parts.push(\" \", path.call(print, \"label\"));\n      parts.push(\";\");\n      return concat(parts);\n    case \"LabeledStatement\":\n      return concat([\n        path.call(print, \"label\"),\n        \":\\n\",\n        path.call(print, \"body\")\n      ]);\n    case \"TryStatement\":\n      parts.push(\"try \", path.call(print, \"block\"));\n      if (n.handler) {\n        parts.push(\" \", path.call(print, \"handler\"));\n      } else if (n.handlers) {\n        path.each(function(handlerPath) {\n          parts.push(\" \", print(handlerPath));\n        }, \"handlers\");\n      }\n      if (n.finalizer) {\n        parts.push(\" finally \", path.call(print, \"finalizer\"));\n      }\n      return concat(parts);\n    case \"CatchClause\":\n      parts.push(\"catch \");\n      if (n.param) {\n        parts.push(\"(\", path.call(print, \"param\"));\n      }\n      if (n.guard) {\n        parts.push(\" if \", path.call(print, \"guard\"));\n      }\n      if (n.param) {\n        parts.push(\") \");\n      }\n      parts.push(path.call(print, \"body\"));\n      return concat(parts);\n    case \"ThrowStatement\":\n      return concat([\"throw \", path.call(print, \"argument\"), \";\"]);\n    case \"SwitchStatement\":\n      return concat([\n        \"switch (\",\n        path.call(print, \"discriminant\"),\n        \") {\\n\",\n        fromString(\"\\n\").join(path.map(print, \"cases\")),\n        \"\\n}\"\n      ]);\n    case \"SwitchCase\":\n      if (n.test)\n        parts.push(\"case \", path.call(print, \"test\"), \":\");\n      else\n        parts.push(\"default:\");\n      if (n.consequent.length > 0) {\n        parts.push(\n          \"\\n\",\n          path.call(\n            (consequentPath) => printStatementSequence(consequentPath, options, print),\n            \"consequent\"\n          ).indent(options.tabWidth)\n        );\n      }\n      return concat(parts);\n    case \"DebuggerStatement\":\n      return fromString(\"debugger;\");\n    case \"JSXAttribute\":\n      parts.push(path.call(print, \"name\"));\n      if (n.value)\n        parts.push(\"=\", path.call(print, \"value\"));\n      return concat(parts);\n    case \"JSXIdentifier\":\n      return fromString(n.name, options);\n    case \"JSXNamespacedName\":\n      return fromString(\":\").join([\n        path.call(print, \"namespace\"),\n        path.call(print, \"name\")\n      ]);\n    case \"JSXMemberExpression\":\n      return fromString(\".\").join([\n        path.call(print, \"object\"),\n        path.call(print, \"property\")\n      ]);\n    case \"JSXSpreadAttribute\":\n      return concat([\"{...\", path.call(print, \"argument\"), \"}\"]);\n    case \"JSXSpreadChild\":\n      return concat([\"{...\", path.call(print, \"expression\"), \"}\"]);\n    case \"JSXExpressionContainer\":\n      return concat([\"{\", path.call(print, \"expression\"), \"}\"]);\n    case \"JSXElement\":\n    case \"JSXFragment\": {\n      const openingPropName = \"opening\" + (n.type === \"JSXElement\" ? \"Element\" : \"Fragment\");\n      const closingPropName = \"closing\" + (n.type === \"JSXElement\" ? \"Element\" : \"Fragment\");\n      const openingLines = path.call(print, openingPropName);\n      if (n[openingPropName].selfClosing) {\n        return openingLines;\n      }\n      const childLines = concat(\n        path.map(function(childPath) {\n          const child = childPath.getValue();\n          if (namedTypes.Literal.check(child) && typeof child.value === \"string\") {\n            if (/\\S/.test(child.value)) {\n              return child.value.replace(/^\\s+|\\s+$/g, \"\");\n            } else if (/\\n/.test(child.value)) {\n              return \"\\n\";\n            }\n          }\n          return print(childPath);\n        }, \"children\")\n      ).indentTail(options.tabWidth);\n      const closingLines = path.call(print, closingPropName);\n      return concat([openingLines, childLines, closingLines]);\n    }\n    case \"JSXOpeningElement\": {\n      parts.push(\"<\", path.call(print, \"name\"));\n      const attrParts = [];\n      path.each(function(attrPath) {\n        attrParts.push(\" \", print(attrPath));\n      }, \"attributes\");\n      let attrLines = concat(attrParts);\n      const needLineWrap = attrLines.length > 1 || attrLines.getLineLength(1) > options.wrapColumn;\n      if (needLineWrap) {\n        attrParts.forEach(function(part, i) {\n          if (part === \" \") {\n            attrParts[i] = \"\\n\";\n          }\n        });\n        attrLines = concat(attrParts).indentTail(options.tabWidth);\n      }\n      parts.push(attrLines, n.selfClosing ? \" />\" : \">\");\n      return concat(parts);\n    }\n    case \"JSXClosingElement\":\n      return concat([\"</\", path.call(print, \"name\"), \">\"]);\n    case \"JSXOpeningFragment\":\n      return fromString(\"<>\");\n    case \"JSXClosingFragment\":\n      return fromString(\"</>\");\n    case \"JSXText\":\n      return fromString(n.value, options);\n    case \"JSXEmptyExpression\":\n      return fromString(\"\");\n    case \"TypeAnnotatedIdentifier\":\n      return concat([\n        path.call(print, \"annotation\"),\n        \" \",\n        path.call(print, \"identifier\")\n      ]);\n    case \"ClassBody\":\n      if (n.body.length === 0) {\n        return fromString(\"{}\");\n      }\n      return concat([\n        \"{\\n\",\n        path.call(\n          (bodyPath) => printStatementSequence(bodyPath, options, print),\n          \"body\"\n        ).indent(options.tabWidth),\n        \"\\n}\"\n      ]);\n    case \"ClassPropertyDefinition\":\n      parts.push(\"static \", path.call(print, \"definition\"));\n      if (!namedTypes.MethodDefinition.check(n.definition))\n        parts.push(\";\");\n      return concat(parts);\n    case \"ClassProperty\": {\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      const access = n.accessibility || n.access;\n      if (typeof access === \"string\") {\n        parts.push(access, \" \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.abstract) {\n        parts.push(\"abstract \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      let key = path.call(print, \"key\");\n      if (n.computed) {\n        key = concat([\"[\", key, \"]\"]);\n      }\n      if (n.variance) {\n        key = concat([printVariance(path, print), key]);\n      }\n      parts.push(key);\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (n.definite) {\n        parts.push(\"!\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"ClassPrivateProperty\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      parts.push(path.call(print, \"key\"));\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    case \"ClassAccessorProperty\": {\n      parts.push(\n        ...printClassMemberModifiers(n),\n        \"accessor \"\n      );\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (n.definite) {\n        parts.push(\"!\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n    case \"DeclareClass\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      if (n.abstract) {\n        parts.push(\"abstract \");\n      }\n      parts.push(\"class\");\n      if (n.id) {\n        parts.push(\" \", path.call(print, \"id\"));\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.superClass) {\n        parts.push(\n          \" extends \",\n          path.call(print, \"superClass\"),\n          path.call(print, \"superTypeParameters\")\n        );\n      }\n      if (n.extends && n.extends.length > 0) {\n        parts.push(\n          \" extends \",\n          fromString(\", \").join(path.map(print, \"extends\"))\n        );\n      }\n      if (n[\"implements\"] && n[\"implements\"].length > 0) {\n        parts.push(\n          \" implements \",\n          fromString(\", \").join(path.map(print, \"implements\"))\n        );\n      }\n      parts.push(\" \", path.call(print, \"body\"));\n      if (n.type === \"DeclareClass\") {\n        return printFlowDeclaration(path, parts);\n      } else {\n        return concat(parts);\n      }\n    case \"TemplateElement\":\n      return fromString(n.value.raw, options).lockIndentTail();\n    case \"TemplateLiteral\": {\n      const expressions = path.map(print, \"expressions\");\n      parts.push(\"`\");\n      path.each(function(childPath) {\n        const i = childPath.getName();\n        parts.push(print(childPath));\n        if (i < expressions.length) {\n          parts.push(\"${\", expressions[i], \"}\");\n        }\n      }, \"quasis\");\n      parts.push(\"`\");\n      return concat(parts).lockIndentTail();\n    }\n    case \"TaggedTemplateExpression\":\n      return concat([path.call(print, \"tag\"), path.call(print, \"quasi\")]);\n    case \"Node\":\n    case \"Printable\":\n    case \"SourceLocation\":\n    case \"Position\":\n    case \"Statement\":\n    case \"Function\":\n    case \"Pattern\":\n    case \"Expression\":\n    case \"Declaration\":\n    case \"Specifier\":\n    case \"NamedSpecifier\":\n    case \"Comment\":\n    case \"Flow\":\n    case \"FlowType\":\n    case \"FlowPredicate\":\n    case \"MemberTypeAnnotation\":\n    case \"Type\":\n    case \"TSHasOptionalTypeParameterInstantiation\":\n    case \"TSHasOptionalTypeParameters\":\n    case \"TSHasOptionalTypeAnnotation\":\n    case \"ChainElement\":\n      throw new Error(\"unprintable type: \" + JSON.stringify(n.type));\n    case \"CommentBlock\":\n    case \"Block\":\n      return concat([\"/*\", fromString(n.value, options), \"*/\"]);\n    case \"CommentLine\":\n    case \"Line\":\n      return concat([\"//\", fromString(n.value, options)]);\n    case \"TypeAnnotation\":\n      if (n.typeAnnotation) {\n        if (n.typeAnnotation.type !== \"FunctionTypeAnnotation\") {\n          parts.push(\": \");\n        }\n        parts.push(path.call(print, \"typeAnnotation\"));\n        return concat(parts);\n      }\n      return fromString(\"\");\n    case \"ExistentialTypeParam\":\n    case \"ExistsTypeAnnotation\":\n      return fromString(\"*\", options);\n    case \"EmptyTypeAnnotation\":\n      return fromString(\"empty\", options);\n    case \"AnyTypeAnnotation\":\n      return fromString(\"any\", options);\n    case \"MixedTypeAnnotation\":\n      return fromString(\"mixed\", options);\n    case \"ArrayTypeAnnotation\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"TupleTypeAnnotation\": {\n      const printed = path.map(print, \"types\");\n      const joined = fromString(\", \").join(printed);\n      const oneLine = joined.getLineLength(1) <= options.wrapColumn;\n      if (oneLine) {\n        if (options.arrayBracketSpacing) {\n          parts.push(\"[ \");\n        } else {\n          parts.push(\"[\");\n        }\n      } else {\n        parts.push(\"[\\n\");\n      }\n      path.each(function(elemPath) {\n        const i = elemPath.getName();\n        const elem = elemPath.getValue();\n        if (!elem) {\n          parts.push(\",\");\n        } else {\n          let lines = printed[i];\n          if (oneLine) {\n            if (i > 0)\n              parts.push(\" \");\n          } else {\n            lines = lines.indent(options.tabWidth);\n          }\n          parts.push(lines);\n          if (i < n.types.length - 1 || !oneLine && isTrailingCommaEnabled(options, \"arrays\"))\n            parts.push(\",\");\n          if (!oneLine)\n            parts.push(\"\\n\");\n        }\n      }, \"types\");\n      if (oneLine && options.arrayBracketSpacing) {\n        parts.push(\" ]\");\n      } else {\n        parts.push(\"]\");\n      }\n      return concat(parts);\n    }\n    case \"BooleanTypeAnnotation\":\n      return fromString(\"boolean\", options);\n    case \"BooleanLiteralTypeAnnotation\":\n      return fromString(\"\" + n.value, options);\n    case \"InterfaceTypeAnnotation\":\n      parts.push(\"interface\");\n      if (n.extends && n.extends.length > 0) {\n        parts.push(\n          \" extends \",\n          fromString(\", \").join(path.map(print, \"extends\"))\n        );\n      }\n      parts.push(\" \", path.call(print, \"body\"));\n      return concat(parts);\n    case \"DeclareFunction\":\n      return printFlowDeclaration(path, [\n        \"function \",\n        path.call(print, \"id\"),\n        \";\"\n      ]);\n    case \"DeclareModule\":\n      return printFlowDeclaration(path, [\n        \"module \",\n        path.call(print, \"id\"),\n        \" \",\n        path.call(print, \"body\")\n      ]);\n    case \"DeclareModuleExports\":\n      return printFlowDeclaration(path, [\n        \"module.exports\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"DeclareVariable\":\n      return printFlowDeclaration(path, [\"var \", path.call(print, \"id\"), \";\"]);\n    case \"DeclareExportDeclaration\":\n    case \"DeclareExportAllDeclaration\":\n      return concat([\"declare \", printExportDeclaration(path, options, print)]);\n    case \"EnumDeclaration\":\n      return concat([\n        \"enum \",\n        path.call(print, \"id\"),\n        path.call(print, \"body\")\n      ]);\n    case \"EnumBooleanBody\":\n    case \"EnumNumberBody\":\n    case \"EnumStringBody\":\n    case \"EnumSymbolBody\": {\n      if (n.type === \"EnumSymbolBody\" || n.explicitType) {\n        parts.push(\n          \" of \",\n          // EnumBooleanBody => boolean, etc.\n          n.type.slice(4, -4).toLowerCase()\n        );\n      }\n      parts.push(\n        \" {\\n\",\n        fromString(\"\\n\").join(path.map(print, \"members\")).indent(options.tabWidth),\n        \"\\n}\"\n      );\n      return concat(parts);\n    }\n    case \"EnumDefaultedMember\":\n      return concat([path.call(print, \"id\"), \",\"]);\n    case \"EnumBooleanMember\":\n    case \"EnumNumberMember\":\n    case \"EnumStringMember\":\n      return concat([\n        path.call(print, \"id\"),\n        \" = \",\n        path.call(print, \"init\"),\n        \",\"\n      ]);\n    case \"InferredPredicate\":\n      return fromString(\"%checks\", options);\n    case \"DeclaredPredicate\":\n      return concat([\"%checks(\", path.call(print, \"value\"), \")\"]);\n    case \"FunctionTypeAnnotation\": {\n      const parent = path.getParentNode(0);\n      const isArrowFunctionTypeAnnotation = !(namedTypes.ObjectTypeCallProperty.check(parent) || namedTypes.ObjectTypeInternalSlot.check(parent) && parent.method || namedTypes.DeclareFunction.check(path.getParentNode(2)));\n      const needsColon = isArrowFunctionTypeAnnotation && !namedTypes.FunctionTypeParam.check(parent) && !namedTypes.TypeAlias.check(parent);\n      if (needsColon) {\n        parts.push(\": \");\n      }\n      const hasTypeParameters = !!n.typeParameters;\n      const needsParens = hasTypeParameters || n.params.length !== 1 || n.params[0].name;\n      parts.push(\n        hasTypeParameters ? path.call(print, \"typeParameters\") : \"\",\n        needsParens ? \"(\" : \"\",\n        printFunctionParams(path, options, print),\n        needsParens ? \")\" : \"\"\n      );\n      if (n.returnType) {\n        parts.push(\n          isArrowFunctionTypeAnnotation ? \" => \" : \": \",\n          path.call(print, \"returnType\")\n        );\n      }\n      return concat(parts);\n    }\n    case \"FunctionTypeParam\": {\n      const name = path.call(print, \"name\");\n      parts.push(name);\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (name.infos[0].line) {\n        parts.push(\": \");\n      }\n      parts.push(path.call(print, \"typeAnnotation\"));\n      return concat(parts);\n    }\n    case \"GenericTypeAnnotation\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"DeclareInterface\":\n      parts.push(\"declare \");\n    case \"InterfaceDeclaration\":\n    case \"TSInterfaceDeclaration\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      parts.push(\n        \"interface \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" \"\n      );\n      if (n[\"extends\"] && n[\"extends\"].length > 0) {\n        parts.push(\n          \"extends \",\n          fromString(\", \").join(path.map(print, \"extends\")),\n          \" \"\n        );\n      }\n      if (n.body) {\n        parts.push(path.call(print, \"body\"));\n      }\n      return concat(parts);\n    case \"ClassImplements\":\n    case \"InterfaceExtends\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"IntersectionTypeAnnotation\":\n      return fromString(\" & \").join(path.map(print, \"types\"));\n    case \"NullableTypeAnnotation\":\n      return concat([\"?\", path.call(print, \"typeAnnotation\")]);\n    case \"NullLiteralTypeAnnotation\":\n      return fromString(\"null\", options);\n    case \"ThisTypeAnnotation\":\n      return fromString(\"this\", options);\n    case \"NumberTypeAnnotation\":\n      return fromString(\"number\", options);\n    case \"ObjectTypeCallProperty\":\n      return path.call(print, \"value\");\n    case \"ObjectTypeIndexer\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      parts.push(printVariance(path, print), \"[\");\n      if (n.id) {\n        parts.push(path.call(print, \"id\"), \": \");\n      }\n      parts.push(path.call(print, \"key\"), \"]: \", path.call(print, \"value\"));\n      return concat(parts);\n    case \"ObjectTypeProperty\":\n      return concat([\n        printVariance(path, print),\n        path.call(print, \"key\"),\n        n.optional ? \"?\" : \"\",\n        \": \",\n        path.call(print, \"value\")\n      ]);\n    case \"ObjectTypeInternalSlot\":\n      return concat([\n        n.static ? \"static \" : \"\",\n        \"[[\",\n        path.call(print, \"id\"),\n        \"]]\",\n        n.optional ? \"?\" : \"\",\n        n.value.type !== \"FunctionTypeAnnotation\" ? \": \" : \"\",\n        path.call(print, \"value\")\n      ]);\n    case \"QualifiedTypeIdentifier\":\n      return concat([\n        path.call(print, \"qualification\"),\n        \".\",\n        path.call(print, \"id\")\n      ]);\n    case \"StringLiteralTypeAnnotation\":\n      return fromString(nodeStr(n.value, options), options);\n    case \"NumberLiteralTypeAnnotation\":\n    case \"NumericLiteralTypeAnnotation\":\n      return fromString(JSON.stringify(n.value), options);\n    case \"BigIntLiteralTypeAnnotation\":\n      return fromString(n.raw, options);\n    case \"StringTypeAnnotation\":\n      return fromString(\"string\", options);\n    case \"DeclareTypeAlias\":\n      parts.push(\"declare \");\n    case \"TypeAlias\":\n      return concat([\n        \"type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" = \",\n        path.call(print, \"right\"),\n        \";\"\n      ]);\n    case \"DeclareOpaqueType\":\n      parts.push(\"declare \");\n    case \"OpaqueType\":\n      parts.push(\n        \"opaque type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      );\n      if (n[\"supertype\"]) {\n        parts.push(\": \", path.call(print, \"supertype\"));\n      }\n      if (n[\"impltype\"]) {\n        parts.push(\" = \", path.call(print, \"impltype\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    case \"TypeCastExpression\":\n      return concat([\n        \"(\",\n        path.call(print, \"expression\"),\n        path.call(print, \"typeAnnotation\"),\n        \")\"\n      ]);\n    case \"TypeParameterDeclaration\":\n    case \"TypeParameterInstantiation\":\n      return concat([\n        \"<\",\n        fromString(\", \").join(path.map(print, \"params\")),\n        \">\"\n      ]);\n    case \"Variance\":\n      if (n.kind === \"plus\") {\n        return fromString(\"+\");\n      }\n      if (n.kind === \"minus\") {\n        return fromString(\"-\");\n      }\n      return fromString(\"\");\n    case \"TypeParameter\":\n      if (n.variance) {\n        parts.push(printVariance(path, print));\n      }\n      parts.push(path.call(print, \"name\"));\n      if (n.bound) {\n        parts.push(path.call(print, \"bound\"));\n      }\n      if (n[\"default\"]) {\n        parts.push(\"=\", path.call(print, \"default\"));\n      }\n      return concat(parts);\n    case \"TypeofTypeAnnotation\":\n      return concat([\n        fromString(\"typeof \", options),\n        path.call(print, \"argument\")\n      ]);\n    case \"IndexedAccessType\":\n    case \"OptionalIndexedAccessType\":\n      return concat([\n        path.call(print, \"objectType\"),\n        n.optional ? \"?.\" : \"\",\n        \"[\",\n        path.call(print, \"indexType\"),\n        \"]\"\n      ]);\n    case \"UnionTypeAnnotation\":\n      return fromString(\" | \").join(path.map(print, \"types\"));\n    case \"VoidTypeAnnotation\":\n      return fromString(\"void\", options);\n    case \"NullTypeAnnotation\":\n      return fromString(\"null\", options);\n    case \"SymbolTypeAnnotation\":\n      return fromString(\"symbol\", options);\n    case \"BigIntTypeAnnotation\":\n      return fromString(\"bigint\", options);\n    case \"TSType\":\n      throw new Error(\"unprintable type: \" + JSON.stringify(n.type));\n    case \"TSNumberKeyword\":\n      return fromString(\"number\", options);\n    case \"TSBigIntKeyword\":\n      return fromString(\"bigint\", options);\n    case \"TSObjectKeyword\":\n      return fromString(\"object\", options);\n    case \"TSBooleanKeyword\":\n      return fromString(\"boolean\", options);\n    case \"TSStringKeyword\":\n      return fromString(\"string\", options);\n    case \"TSSymbolKeyword\":\n      return fromString(\"symbol\", options);\n    case \"TSAnyKeyword\":\n      return fromString(\"any\", options);\n    case \"TSVoidKeyword\":\n      return fromString(\"void\", options);\n    case \"TSIntrinsicKeyword\":\n      return fromString(\"intrinsic\", options);\n    case \"TSThisType\":\n      return fromString(\"this\", options);\n    case \"TSNullKeyword\":\n      return fromString(\"null\", options);\n    case \"TSUndefinedKeyword\":\n      return fromString(\"undefined\", options);\n    case \"TSUnknownKeyword\":\n      return fromString(\"unknown\", options);\n    case \"TSNeverKeyword\":\n      return fromString(\"never\", options);\n    case \"TSArrayType\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"TSLiteralType\":\n      return path.call(print, \"literal\");\n    case \"TSUnionType\":\n      return fromString(\" | \").join(path.map(print, \"types\"));\n    case \"TSIntersectionType\":\n      return fromString(\" & \").join(path.map(print, \"types\"));\n    case \"TSConditionalType\":\n      parts.push(\n        path.call(print, \"checkType\"),\n        \" extends \",\n        path.call(print, \"extendsType\"),\n        \" ? \",\n        path.call(print, \"trueType\"),\n        \" : \",\n        path.call(print, \"falseType\")\n      );\n      return concat(parts);\n    case \"TSInferType\":\n      parts.push(\"infer \", path.call(print, \"typeParameter\"));\n      return concat(parts);\n    case \"TSParenthesizedType\":\n      return concat([\"(\", path.call(print, \"typeAnnotation\"), \")\"]);\n    case \"TSFunctionType\":\n      return concat([\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \") => \",\n        path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n      ]);\n    case \"TSConstructorType\":\n      return concat([\n        \"new \",\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \") => \",\n        path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n      ]);\n    case \"TSMappedType\": {\n      parts.push(\n        n.readonly ? \"readonly \" : \"\",\n        \"[\",\n        path.call(print, \"typeParameter\"),\n        \"]\",\n        n.optional ? \"?\" : \"\"\n      );\n      if (n.typeAnnotation) {\n        parts.push(\": \", path.call(print, \"typeAnnotation\"), \";\");\n      }\n      return concat([\"{\\n\", concat(parts).indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"TSTupleType\":\n      return concat([\n        \"[\",\n        fromString(\", \").join(path.map(print, \"elementTypes\")),\n        \"]\"\n      ]);\n    case \"TSNamedTupleMember\":\n      parts.push(path.call(print, \"label\"));\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      parts.push(\": \", path.call(print, \"elementType\"));\n      return concat(parts);\n    case \"TSRestType\":\n      return concat([\"...\", path.call(print, \"typeAnnotation\")]);\n    case \"TSOptionalType\":\n      return concat([path.call(print, \"typeAnnotation\"), \"?\"]);\n    case \"TSIndexedAccessType\":\n      return concat([\n        path.call(print, \"objectType\"),\n        \"[\",\n        path.call(print, \"indexType\"),\n        \"]\"\n      ]);\n    case \"TSTypeOperator\":\n      return concat([\n        path.call(print, \"operator\"),\n        \" \",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSTypeLiteral\": {\n      const members = fromString(\"\\n\").join(\n        path.map(print, \"members\").map((member) => {\n          if (lastNonSpaceCharacter(member) !== \";\") {\n            return member.concat(\";\");\n          }\n          return member;\n        })\n      );\n      if (members.isEmpty()) {\n        return fromString(\"{}\", options);\n      }\n      parts.push(\"{\\n\", members.indent(options.tabWidth), \"\\n}\");\n      return concat(parts);\n    }\n    case \"TSEnumMember\":\n      parts.push(path.call(print, \"id\"));\n      if (n.initializer) {\n        parts.push(\" = \", path.call(print, \"initializer\"));\n      }\n      return concat(parts);\n    case \"TSTypeQuery\":\n      return concat([\"typeof \", path.call(print, \"exprName\")]);\n    case \"TSParameterProperty\":\n      if (n.accessibility) {\n        parts.push(n.accessibility, \" \");\n      }\n      if (n.export) {\n        parts.push(\"export \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      parts.push(path.call(print, \"parameter\"));\n      return concat(parts);\n    case \"TSTypeReference\":\n      return concat([\n        path.call(print, \"typeName\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"TSQualifiedName\":\n      return concat([path.call(print, \"left\"), \".\", path.call(print, \"right\")]);\n    case \"TSAsExpression\":\n    case \"TSSatisfiesExpression\": {\n      const expression = path.call(print, \"expression\");\n      parts.push(\n        expression,\n        n.type === \"TSSatisfiesExpression\" ? \" satisfies \" : \" as \",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    }\n    case \"TSTypeCastExpression\":\n      return concat([\n        path.call(print, \"expression\"),\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSNonNullExpression\":\n      return concat([path.call(print, \"expression\"), \"!\"]);\n    case \"TSTypeAnnotation\":\n      return concat([\": \", path.call(print, \"typeAnnotation\")]);\n    case \"TSIndexSignature\":\n      return concat([\n        n.readonly ? \"readonly \" : \"\",\n        \"[\",\n        path.map(print, \"parameters\"),\n        \"]\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSPropertySignature\":\n      parts.push(printVariance(path, print), n.readonly ? \"readonly \" : \"\");\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      parts.push(n.optional ? \"?\" : \"\", path.call(print, \"typeAnnotation\"));\n      return concat(parts);\n    case \"TSMethodSignature\":\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      parts.push(\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    case \"TSTypePredicate\":\n      if (n.asserts) {\n        parts.push(\"asserts \");\n      }\n      parts.push(path.call(print, \"parameterName\"));\n      if (n.typeAnnotation) {\n        parts.push(\n          \" is \",\n          path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n        );\n      }\n      return concat(parts);\n    case \"TSCallSignatureDeclaration\":\n      return concat([\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSConstructSignatureDeclaration\":\n      if (n.typeParameters) {\n        parts.push(\"new\", path.call(print, \"typeParameters\"));\n      } else {\n        parts.push(\"new \");\n      }\n      parts.push(\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    case \"TSTypeAliasDeclaration\":\n      return concat([\n        n.declare ? \"declare \" : \"\",\n        \"type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" = \",\n        path.call(print, \"typeAnnotation\"),\n        \";\"\n      ]);\n    case \"TSTypeParameter\": {\n      parts.push(path.call(print, \"name\"));\n      const parent = path.getParentNode(0);\n      const isInMappedType = namedTypes.TSMappedType.check(parent);\n      if (n.constraint) {\n        parts.push(\n          isInMappedType ? \" in \" : \" extends \",\n          path.call(print, \"constraint\")\n        );\n      }\n      if (n[\"default\"]) {\n        parts.push(\" = \", path.call(print, \"default\"));\n      }\n      return concat(parts);\n    }\n    case \"TSTypeAssertion\": {\n      parts.push(\n        \"<\",\n        path.call(print, \"typeAnnotation\"),\n        \"> \",\n        path.call(print, \"expression\")\n      );\n      return concat(parts);\n    }\n    case \"TSTypeParameterDeclaration\":\n    case \"TSTypeParameterInstantiation\":\n      return concat([\n        \"<\",\n        fromString(\", \").join(path.map(print, \"params\")),\n        \">\"\n      ]);\n    case \"TSEnumDeclaration\": {\n      parts.push(\n        n.declare ? \"declare \" : \"\",\n        n.const ? \"const \" : \"\",\n        \"enum \",\n        path.call(print, \"id\")\n      );\n      const memberLines = fromString(\",\\n\").join(path.map(print, \"members\"));\n      if (memberLines.isEmpty()) {\n        parts.push(\" {}\");\n      } else {\n        parts.push(\" {\\n\", memberLines.indent(options.tabWidth), \"\\n}\");\n      }\n      return concat(parts);\n    }\n    case \"TSExpressionWithTypeArguments\":\n      return concat([\n        path.call(print, \"expression\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"TSInterfaceBody\": {\n      const lines = fromString(\"\\n\").join(\n        path.map(print, \"body\").map((element) => {\n          if (lastNonSpaceCharacter(element) !== \";\") {\n            return element.concat(\";\");\n          }\n          return element;\n        })\n      );\n      if (lines.isEmpty()) {\n        return fromString(\"{}\", options);\n      }\n      return concat([\"{\\n\", lines.indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"TSImportType\":\n      parts.push(\"import(\", path.call(print, \"argument\"), \")\");\n      if (n.qualifier) {\n        parts.push(\".\", path.call(print, \"qualifier\"));\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      return concat(parts);\n    case \"TSImportEqualsDeclaration\":\n      if (n.isExport) {\n        parts.push(\"export \");\n      }\n      parts.push(\n        \"import \",\n        path.call(print, \"id\"),\n        \" = \",\n        path.call(print, \"moduleReference\")\n      );\n      return maybeAddSemicolon(concat(parts));\n    case \"TSExternalModuleReference\":\n      return concat([\"require(\", path.call(print, \"expression\"), \")\"]);\n    case \"TSModuleDeclaration\": {\n      const parent = path.getParentNode();\n      if (parent.type === \"TSModuleDeclaration\") {\n        parts.push(\".\");\n      } else {\n        if (n.declare) {\n          parts.push(\"declare \");\n        }\n        if (!n.global) {\n          const isExternal = n.id.type === \"StringLiteral\" || n.id.type === \"Literal\" && typeof n.id.value === \"string\";\n          if (isExternal) {\n            parts.push(\"module \");\n          } else if (n.loc && n.loc.lines && n.id.loc) {\n            const prefix = n.loc.lines.sliceString(n.loc.start, n.id.loc.start);\n            if (prefix.indexOf(\"module\") >= 0) {\n              parts.push(\"module \");\n            } else {\n              parts.push(\"namespace \");\n            }\n          } else {\n            parts.push(\"namespace \");\n          }\n        }\n      }\n      parts.push(path.call(print, \"id\"));\n      if (n.body) {\n        parts.push(\" \");\n        parts.push(path.call(print, \"body\"));\n      }\n      return concat(parts);\n    }\n    case \"TSModuleBlock\": {\n      const naked = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      if (naked.isEmpty()) {\n        parts.push(\"{}\");\n      } else {\n        parts.push(\"{\\n\", naked.indent(options.tabWidth), \"\\n}\");\n      }\n      return concat(parts);\n    }\n    case \"TSInstantiationExpression\": {\n      parts.push(\n        path.call(print, \"expression\"),\n        path.call(print, \"typeParameters\")\n      );\n      return concat(parts);\n    }\n    case \"V8IntrinsicIdentifier\":\n      return concat([\"%\", path.call(print, \"name\")]);\n    case \"TopicReference\":\n      return fromString(\"#\");\n    case \"ClassHeritage\":\n    case \"ComprehensionBlock\":\n    case \"ComprehensionExpression\":\n    case \"Glob\":\n    case \"GeneratorExpression\":\n    case \"LetStatement\":\n    case \"LetExpression\":\n    case \"GraphExpression\":\n    case \"GraphIndexExpression\":\n    case \"XMLDefaultDeclaration\":\n    case \"XMLAnyName\":\n    case \"XMLQualifiedIdentifier\":\n    case \"XMLFunctionQualifiedIdentifier\":\n    case \"XMLAttributeSelector\":\n    case \"XMLFilterExpression\":\n    case \"XML\":\n    case \"XMLElement\":\n    case \"XMLList\":\n    case \"XMLEscape\":\n    case \"XMLText\":\n    case \"XMLStartTag\":\n    case \"XMLEndTag\":\n    case \"XMLPointTag\":\n    case \"XMLName\":\n    case \"XMLAttribute\":\n    case \"XMLCdata\":\n    case \"XMLComment\":\n    case \"XMLProcessingInstruction\":\n    default:\n      debugger;\n      throw new Error(\"unknown type: \" + JSON.stringify(n.type));\n  }\n}\nfunction printDecorators(path, printPath) {\n  const parts = [];\n  const node = path.getValue();\n  if (node.decorators && node.decorators.length > 0 && // If the parent node is an export declaration, it will be\n  // responsible for printing node.decorators.\n  !getParentExportDeclaration(path)) {\n    path.each(function(decoratorPath) {\n      parts.push(printPath(decoratorPath), \"\\n\");\n    }, \"decorators\");\n  } else if (isExportDeclaration(node) && node.declaration && node.declaration.decorators) {\n    path.each(\n      function(decoratorPath) {\n        parts.push(printPath(decoratorPath), \"\\n\");\n      },\n      \"declaration\",\n      \"decorators\"\n    );\n  }\n  return concat(parts);\n}\nfunction printStatementSequence(path, options, print) {\n  const filtered = [];\n  path.each(function(stmtPath) {\n    const stmt = stmtPath.getValue();\n    if (!stmt) {\n      return;\n    }\n    if (stmt.type === \"EmptyStatement\" && !(stmt.comments && stmt.comments.length > 0)) {\n      return;\n    }\n    if (namedTypes.Comment.check(stmt)) ; else if (namedTypes.Statement.check(stmt)) ; else {\n      isString.assert(stmt);\n    }\n    filtered.push({\n      node: stmt,\n      printed: print(stmtPath)\n    });\n  });\n  let prevTrailingSpace = null;\n  const len = filtered.length;\n  const parts = [];\n  filtered.forEach(function(info, i) {\n    const printed = info.printed;\n    const stmt = info.node;\n    const multiLine = printed.length > 1;\n    const notFirst = i > 0;\n    const notLast = i < len - 1;\n    let leadingSpace;\n    let trailingSpace;\n    const lines = stmt && stmt.loc && stmt.loc.lines;\n    const trueLoc = lines && options.reuseWhitespace && getTrueLoc(stmt, lines);\n    if (notFirst) {\n      if (trueLoc) {\n        const beforeStart = lines.skipSpaces(trueLoc.start, true);\n        const beforeStartLine = beforeStart ? beforeStart.line : 1;\n        const leadingGap = trueLoc.start.line - beforeStartLine;\n        leadingSpace = Array(leadingGap + 1).join(\"\\n\");\n      } else {\n        leadingSpace = multiLine ? \"\\n\\n\" : \"\\n\";\n      }\n    } else {\n      leadingSpace = \"\";\n    }\n    if (notLast) {\n      if (trueLoc) {\n        const afterEnd = lines.skipSpaces(trueLoc.end);\n        const afterEndLine = afterEnd ? afterEnd.line : lines.length;\n        const trailingGap = afterEndLine - trueLoc.end.line;\n        trailingSpace = Array(trailingGap + 1).join(\"\\n\");\n      } else {\n        trailingSpace = multiLine ? \"\\n\\n\" : \"\\n\";\n      }\n    } else {\n      trailingSpace = \"\";\n    }\n    parts.push(maxSpace(prevTrailingSpace, leadingSpace), printed);\n    if (notLast) {\n      prevTrailingSpace = trailingSpace;\n    } else if (trailingSpace) {\n      parts.push(trailingSpace);\n    }\n  });\n  return concat(parts);\n}\nfunction maxSpace(s1, s2) {\n  if (!s1 && !s2) {\n    return fromString(\"\");\n  }\n  if (!s1) {\n    return fromString(s2);\n  }\n  if (!s2) {\n    return fromString(s1);\n  }\n  const spaceLines1 = fromString(s1);\n  const spaceLines2 = fromString(s2);\n  if (spaceLines2.length > spaceLines1.length) {\n    return spaceLines2;\n  }\n  return spaceLines1;\n}\nfunction printClassMemberModifiers(node) {\n  const parts = [];\n  if (node.declare) {\n    parts.push(\"declare \");\n  }\n  const access = node.accessibility || node.access;\n  if (typeof access === \"string\") {\n    parts.push(access, \" \");\n  }\n  if (node.static) {\n    parts.push(\"static \");\n  }\n  if (node.override) {\n    parts.push(\"override \");\n  }\n  if (node.abstract) {\n    parts.push(\"abstract \");\n  }\n  if (node.readonly) {\n    parts.push(\"readonly \");\n  }\n  return parts;\n}\nfunction printMethod(path, options, print) {\n  const node = path.getNode();\n  const kind = node.kind;\n  const parts = [];\n  let nodeValue = node.value;\n  if (!namedTypes.FunctionExpression.check(nodeValue)) {\n    nodeValue = node;\n  }\n  parts.push(...printClassMemberModifiers(node));\n  if (nodeValue.async) {\n    parts.push(\"async \");\n  }\n  if (nodeValue.generator) {\n    parts.push(\"*\");\n  }\n  if (kind === \"get\" || kind === \"set\") {\n    parts.push(kind, \" \");\n  }\n  let key = path.call(print, \"key\");\n  if (node.computed) {\n    key = concat([\"[\", key, \"]\"]);\n  }\n  parts.push(key);\n  if (node.optional) {\n    parts.push(\"?\");\n  }\n  if (node === nodeValue) {\n    parts.push(\n      path.call(print, \"typeParameters\"),\n      \"(\",\n      printFunctionParams(path, options, print),\n      \")\",\n      path.call(print, \"returnType\")\n    );\n    if (node.body) {\n      parts.push(\" \", path.call(print, \"body\"));\n    } else {\n      parts.push(\";\");\n    }\n  } else {\n    parts.push(\n      path.call(print, \"value\", \"typeParameters\"),\n      \"(\",\n      path.call(\n        (valuePath) => printFunctionParams(valuePath, options, print),\n        \"value\"\n      ),\n      \")\",\n      path.call(print, \"value\", \"returnType\")\n    );\n    if (nodeValue.body) {\n      parts.push(\" \", path.call(print, \"value\", \"body\"));\n    } else {\n      parts.push(\";\");\n    }\n  }\n  return concat(parts);\n}\nfunction printArgumentsList(path, options, print) {\n  const printed = path.map(print, \"arguments\");\n  const trailingComma = isTrailingCommaEnabled(options, \"parameters\");\n  let joined = fromString(\", \").join(printed);\n  if (joined.getLineLength(1) > options.wrapColumn) {\n    joined = fromString(\",\\n\").join(printed);\n    return concat([\n      \"(\\n\",\n      joined.indent(options.tabWidth),\n      trailingComma ? \",\\n)\" : \"\\n)\"\n    ]);\n  }\n  return concat([\"(\", joined, \")\"]);\n}\nfunction printFunctionParams(path, options, print) {\n  const fun = path.getValue();\n  let params;\n  let printed = [];\n  if (fun.params) {\n    params = fun.params;\n    printed = path.map(print, \"params\");\n  } else if (fun.parameters) {\n    params = fun.parameters;\n    printed = path.map(print, \"parameters\");\n  }\n  if (fun.defaults) {\n    path.each(function(defExprPath) {\n      const i = defExprPath.getName();\n      const p = printed[i];\n      if (p && defExprPath.getValue()) {\n        printed[i] = concat([p, \" = \", print(defExprPath)]);\n      }\n    }, \"defaults\");\n  }\n  if (fun.rest) {\n    printed.push(concat([\"...\", path.call(print, \"rest\")]));\n  }\n  let joined = fromString(\", \").join(printed);\n  if (joined.length > 1 || joined.getLineLength(1) > options.wrapColumn) {\n    joined = fromString(\",\\n\").join(printed);\n    if (isTrailingCommaEnabled(options, \"parameters\") && !fun.rest && params[params.length - 1].type !== \"RestElement\") {\n      joined = concat([joined, \",\\n\"]);\n    } else {\n      joined = concat([joined, \"\\n\"]);\n    }\n    return concat([\"\\n\", joined.indent(options.tabWidth)]);\n  }\n  return joined;\n}\nfunction maybePrintImportAssertions(path, options, print) {\n  const n = path.getValue();\n  if (n.assertions && n.assertions.length > 0) {\n    const parts = [\" assert {\"];\n    const printed = path.map(print, \"assertions\");\n    const flat = fromString(\", \").join(printed);\n    if (flat.length > 1 || flat.getLineLength(1) > options.wrapColumn) {\n      parts.push(\n        \"\\n\",\n        fromString(\",\\n\").join(printed).indent(options.tabWidth),\n        \"\\n}\"\n      );\n    } else {\n      parts.push(\" \", flat, \" }\");\n    }\n    return concat(parts);\n  }\n  return fromString(\"\");\n}\nfunction printExportDeclaration(path, options, print) {\n  const decl = path.getValue();\n  const parts = [\"export \"];\n  if (decl.exportKind && decl.exportKind === \"type\") {\n    if (!decl.declaration) {\n      parts.push(\"type \");\n    }\n  }\n  const shouldPrintSpaces = options.objectCurlySpacing;\n  namedTypes.Declaration.assert(decl);\n  if (decl[\"default\"] || decl.type === \"ExportDefaultDeclaration\") {\n    parts.push(\"default \");\n  }\n  if (decl.declaration) {\n    parts.push(path.call(print, \"declaration\"));\n  } else if (decl.specifiers) {\n    if (decl.specifiers.length === 1 && decl.specifiers[0].type === \"ExportBatchSpecifier\") {\n      parts.push(\"*\");\n    } else if (decl.specifiers.length === 0) {\n      parts.push(\"{}\");\n    } else if (decl.specifiers[0].type === \"ExportDefaultSpecifier\") {\n      const unbracedSpecifiers = [];\n      const bracedSpecifiers = [];\n      path.each(function(specifierPath) {\n        const spec = specifierPath.getValue();\n        if (spec.type === \"ExportDefaultSpecifier\") {\n          unbracedSpecifiers.push(print(specifierPath));\n        } else {\n          bracedSpecifiers.push(print(specifierPath));\n        }\n      }, \"specifiers\");\n      unbracedSpecifiers.forEach((lines2, i) => {\n        if (i > 0) {\n          parts.push(\", \");\n        }\n        parts.push(lines2);\n      });\n      if (bracedSpecifiers.length > 0) {\n        let lines2 = fromString(\", \").join(bracedSpecifiers);\n        if (lines2.getLineLength(1) > options.wrapColumn) {\n          lines2 = concat([\n            fromString(\",\\n\").join(bracedSpecifiers).indent(options.tabWidth),\n            \",\"\n          ]);\n        }\n        if (unbracedSpecifiers.length > 0) {\n          parts.push(\", \");\n        }\n        if (lines2.length > 1) {\n          parts.push(\"{\\n\", lines2, \"\\n}\");\n        } else if (options.objectCurlySpacing) {\n          parts.push(\"{ \", lines2, \" }\");\n        } else {\n          parts.push(\"{\", lines2, \"}\");\n        }\n      }\n    } else {\n      parts.push(\n        shouldPrintSpaces ? \"{ \" : \"{\",\n        fromString(\", \").join(path.map(print, \"specifiers\")),\n        shouldPrintSpaces ? \" }\" : \"}\"\n      );\n    }\n    if (decl.source) {\n      parts.push(\n        \" from \",\n        path.call(print, \"source\"),\n        maybePrintImportAssertions(path, options, print)\n      );\n    }\n  }\n  let lines = concat(parts);\n  if (lastNonSpaceCharacter(lines) !== \";\" && !(decl.declaration && (decl.declaration.type === \"FunctionDeclaration\" || decl.declaration.type === \"ClassDeclaration\" || decl.declaration.type === \"TSModuleDeclaration\" || decl.declaration.type === \"TSInterfaceDeclaration\" || decl.declaration.type === \"TSEnumDeclaration\"))) {\n    lines = concat([lines, \";\"]);\n  }\n  return lines;\n}\nfunction printFlowDeclaration(path, parts) {\n  const parentExportDecl = getParentExportDeclaration(path);\n  if (parentExportDecl) ; else {\n    parts.unshift(\"declare \");\n  }\n  return concat(parts);\n}\nfunction printVariance(path, print) {\n  return path.call(function(variancePath) {\n    const value = variancePath.getValue();\n    if (value) {\n      if (value === \"plus\") {\n        return fromString(\"+\");\n      }\n      if (value === \"minus\") {\n        return fromString(\"-\");\n      }\n      return print(variancePath);\n    }\n    return fromString(\"\");\n  }, \"variance\");\n}\nfunction adjustClause(clause, options) {\n  if (clause.length > 1)\n    return concat([\" \", clause]);\n  return concat([\"\\n\", maybeAddSemicolon(clause).indent(options.tabWidth)]);\n}\nfunction lastNonSpaceCharacter(lines) {\n  const pos = lines.lastPos();\n  do {\n    const ch = lines.charAt(pos);\n    if (/\\S/.test(ch))\n      return ch;\n  } while (lines.prevPos(pos));\n}\nfunction endsWithBrace(lines) {\n  return lastNonSpaceCharacter(lines) === \"}\";\n}\nfunction swapQuotes(str) {\n  return str.replace(/['\"]/g, (m) => m === '\"' ? \"'\" : '\"');\n}\nfunction getPossibleRaw(node) {\n  const value = getFieldValue(node, \"value\");\n  const extra = getFieldValue(node, \"extra\");\n  if (extra && typeof extra.raw === \"string\" && value == extra.rawValue) {\n    return extra.raw;\n  }\n  if (node.type === \"Literal\") {\n    const raw = node.raw;\n    if (typeof raw === \"string\" && value == raw) {\n      return raw;\n    }\n  }\n}\nfunction jsSafeStringify(str) {\n  return JSON.stringify(str).replace(/[\\u2028\\u2029]/g, function(m) {\n    return \"\\\\u\" + m.charCodeAt(0).toString(16);\n  });\n}\nfunction nodeStr(str, options) {\n  isString.assert(str);\n  switch (options.quote) {\n    case \"auto\": {\n      const double = jsSafeStringify(str);\n      const single = swapQuotes(jsSafeStringify(swapQuotes(str)));\n      return double.length > single.length ? single : double;\n    }\n    case \"single\":\n      return swapQuotes(jsSafeStringify(swapQuotes(str)));\n    case \"double\":\n    default:\n      return jsSafeStringify(str);\n  }\n}\nfunction maybeAddSemicolon(lines) {\n  const eoc = lastNonSpaceCharacter(lines);\n  if (!eoc || \"\\n};\".indexOf(eoc) < 0)\n    return concat([lines, \";\"]);\n  return lines;\n}\n\nfunction print(node, options) {\n  return new Printer(options).print(node);\n}\n\nlet _babelParser;\nfunction getBabelParser() {\n  if (_babelParser) {\n    return _babelParser;\n  }\n  const babelOptions = _getBabelOptions();\n  _babelParser = {\n    parse(source, options) {\n      return babelParser.parse(source, {\n        ...babelOptions,\n        ...options\n      });\n    }\n  };\n  return _babelParser;\n}\nfunction _getBabelOptions() {\n  return {\n    sourceType: \"module\",\n    strictMode: false,\n    allowImportExportEverywhere: true,\n    allowReturnOutsideFunction: true,\n    startLine: 1,\n    tokens: true,\n    plugins: [\n      \"asyncGenerators\",\n      \"bigInt\",\n      \"classPrivateMethods\",\n      \"classPrivateProperties\",\n      \"classProperties\",\n      \"classStaticBlock\",\n      \"decimal\",\n      \"decorators-legacy\",\n      \"doExpressions\",\n      \"dynamicImport\",\n      \"exportDefaultFrom\",\n      \"exportExtensions\",\n      \"exportNamespaceFrom\",\n      \"functionBind\",\n      \"functionSent\",\n      \"importAssertions\",\n      \"importMeta\",\n      \"nullishCoalescingOperator\",\n      \"numericSeparator\",\n      \"objectRestSpread\",\n      \"optionalCatchBinding\",\n      \"optionalChaining\",\n      [\n        \"pipelineOperator\",\n        {\n          proposal: \"minimal\"\n        }\n      ],\n      [\n        \"recordAndTuple\",\n        {\n          syntaxType: \"hash\"\n        }\n      ],\n      \"throwExpressions\",\n      \"topLevelAwait\",\n      \"v8intrinsic\",\n      \"jsx\",\n      \"typescript\"\n    ]\n  };\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass MagicastError extends Error {\n  constructor(message, options) {\n    super(\"\");\n    __publicField(this, \"rawMessage\");\n    __publicField(this, \"options\");\n    this.name = \"MagicastError\";\n    this.rawMessage = message;\n    this.options = options;\n    if (options?.ast && options?.code && options.ast.loc) {\n      const { line, column } = options.ast.loc.start;\n      const lines = options.code.split(\"\\n\");\n      const start = Math.max(0, line - 3);\n      const end = Math.min(lines.length, line + 3);\n      const codeFrame = lines.slice(start, end).map((lineCode, i) => {\n        const number = (start + i + 1).toString().padStart(3, \" \");\n        lineCode = `${number} | ${lineCode}`;\n        if (start + i === line - 1) {\n          lineCode += `\n${\" \".repeat(6 + column)}^`;\n        }\n        return lineCode;\n      });\n      message += `\n\n${codeFrame.join(\"\\n\")}\n`;\n    }\n    this.message = message;\n  }\n}\n\nconst LITERALS_AST = /* @__PURE__ */ new Set([\n  \"Literal\",\n  \"StringLiteral\",\n  \"NumericLiteral\",\n  \"BooleanLiteral\",\n  \"NullLiteral\",\n  \"RegExpLiteral\",\n  \"BigIntLiteral\"\n]);\nconst LITERALS_TYPEOF = /* @__PURE__ */ new Set([\n  \"string\",\n  \"number\",\n  \"boolean\",\n  \"bigint\",\n  \"symbol\",\n  \"undefined\"\n]);\nconst b$4 = khulnasofts$1;\nfunction isValidPropName(name) {\n  return /^[$A-Z_a-z][\\w$]*$/.test(name);\n}\nconst PROXY_KEY = \"__magicast_proxy\";\nfunction literalToAst(value, seen = /* @__PURE__ */ new Set()) {\n  if (value === void 0) {\n    return b$4.identifier(\"undefined\");\n  }\n  if (value === null) {\n    return b$4.literal(null);\n  }\n  if (LITERALS_TYPEOF.has(typeof value)) {\n    return b$4.literal(value);\n  }\n  if (seen.has(value)) {\n    throw new MagicastError(\"Can not serialize circular reference\");\n  }\n  seen.add(value);\n  if (value[PROXY_KEY]) {\n    return value.$ast;\n  }\n  if (value instanceof RegExp) {\n    const regex = b$4.regExpLiteral(value.source, value.flags);\n    delete regex.extra.raw;\n    return regex;\n  }\n  if (value instanceof Set) {\n    return b$4.newExpression(b$4.identifier(\"Set\"), [\n      b$4.arrayExpression([...value].map((n) => literalToAst(n, seen)))\n    ]);\n  }\n  if (value instanceof Date) {\n    return b$4.newExpression(b$4.identifier(\"Date\"), [\n      b$4.literal(value.toISOString())\n    ]);\n  }\n  if (value instanceof Map) {\n    return b$4.newExpression(b$4.identifier(\"Map\"), [\n      b$4.arrayExpression(\n        [...value].map(([key, value2]) => {\n          return b$4.arrayExpression([\n            literalToAst(key, seen),\n            literalToAst(value2, seen)\n          ]);\n        })\n      )\n    ]);\n  }\n  if (Array.isArray(value)) {\n    return b$4.arrayExpression(\n      value.map((n) => literalToAst(n, seen))\n    );\n  }\n  if (typeof value === \"object\") {\n    return b$4.objectExpression(\n      Object.entries(value).map(([key, value2]) => {\n        return b$4.property(\n          \"init\",\n          /^[$A-Z_a-z][\\w$]*$/g.test(key) ? b$4.identifier(key) : b$4.literal(key),\n          literalToAst(value2, seen)\n        );\n      })\n    );\n  }\n  return b$4.literal(value);\n}\nfunction makeProxyUtils(node, extend = {}) {\n  const obj = extend;\n  obj[PROXY_KEY] = true;\n  obj.$ast = node;\n  obj.$type || (obj.$type = \"object\");\n  return obj;\n}\nconst propertyDescriptor = {\n  enumerable: true,\n  configurable: true\n};\nfunction createProxy(node, extend, handler) {\n  const utils = makeProxyUtils(node, extend);\n  return new Proxy(\n    {},\n    {\n      ownKeys() {\n        return Object.keys(utils).filter(\n          (i) => i !== PROXY_KEY && !i.startsWith(\"$\")\n        );\n      },\n      getOwnPropertyDescriptor() {\n        return propertyDescriptor;\n      },\n      has(_target, key) {\n        if (key in utils) {\n          return true;\n        }\n        return false;\n      },\n      ...handler,\n      get(target, key, receiver) {\n        if (key in utils) {\n          return utils[key];\n        }\n        if (handler.get) {\n          return handler.get(target, key, receiver);\n        }\n      },\n      set(target, key, value, receiver) {\n        if (key in utils) {\n          utils[key] = value;\n          return true;\n        }\n        if (handler.set) {\n          return handler.set(target, key, value, receiver);\n        }\n        return false;\n      }\n    }\n  );\n}\n\nconst b$3 = khulnasofts$1;\nconst _importProxyCache = /* @__PURE__ */ new WeakMap();\nfunction creatImportProxy(node, specifier, root) {\n  if (_importProxyCache.has(specifier)) {\n    return _importProxyCache.get(specifier);\n  }\n  const proxy = createProxy(\n    specifier,\n    {\n      get $declaration() {\n        return node;\n      },\n      get imported() {\n        if (specifier.type === \"ImportDefaultSpecifier\") {\n          return \"default\";\n        }\n        if (specifier.type === \"ImportNamespaceSpecifier\") {\n          return \"*\";\n        }\n        if (specifier.imported.type === \"Identifier\") {\n          return specifier.imported.name;\n        }\n        return specifier.imported.value;\n      },\n      set imported(value) {\n        if (specifier.type !== \"ImportSpecifier\") {\n          throw new MagicastError(\n            \"Changing import name is not yet implemented\"\n          );\n        }\n        if (specifier.imported.type === \"Identifier\") {\n          specifier.imported.name = value;\n        } else {\n          specifier.imported.value = value;\n        }\n      },\n      get local() {\n        return specifier.local.name;\n      },\n      set local(value) {\n        specifier.local.name = value;\n      },\n      get from() {\n        return node.source.value;\n      },\n      set from(value) {\n        if (value === node.source.value) {\n          return;\n        }\n        node.specifiers = node.specifiers.filter((s) => s !== specifier);\n        if (node.specifiers.length === 0) {\n          root.body = root.body.filter((s) => s !== node);\n        }\n        const declaration = root.body.find(\n          (i) => i.type === \"ImportDeclaration\" && i.source.value === value\n        );\n        if (declaration) {\n          declaration.specifiers.push(specifier);\n        } else {\n          root.body.unshift(\n            b$3.importDeclaration(\n              [specifier],\n              b$3.stringLiteral(value)\n            )\n          );\n        }\n      },\n      toJSON() {\n        return {\n          imported: this.imported,\n          local: this.local,\n          from: this.from\n        };\n      }\n    },\n    {\n      ownKeys() {\n        return [\"imported\", \"local\", \"from\", \"toJSON\"];\n      }\n    }\n  );\n  _importProxyCache.set(specifier, proxy);\n  return proxy;\n}\nfunction createImportsProxy(root, mod) {\n  const getAllImports = () => {\n    const imports = [];\n    for (const n of root.body) {\n      if (n.type === \"ImportDeclaration\") {\n        for (const specifier of n.specifiers) {\n          imports.push(creatImportProxy(n, specifier, root));\n        }\n      }\n    }\n    return imports;\n  };\n  const updateImport = (key, value, order) => {\n    const imports = getAllImports();\n    const item = imports.find((i) => i.local === key);\n    const local = value.local || key;\n    if (item) {\n      item.imported = value.imported;\n      item.local = local;\n      item.from = value.from;\n      return true;\n    }\n    const specifier = value.imported === \"default\" ? b$3.importDefaultSpecifier(b$3.identifier(local)) : value.imported === \"*\" ? b$3.importNamespaceSpecifier(b$3.identifier(local)) : b$3.importSpecifier(\n      b$3.identifier(value.imported),\n      b$3.identifier(local)\n    );\n    const declaration = imports.find(\n      (i) => i.from === value.from\n    )?.$declaration;\n    if (declaration) {\n      declaration.specifiers.push(specifier);\n    } else if (order === \"prepend\" || imports.length === 0) {\n      root.body.unshift(\n        b$3.importDeclaration([specifier], b$3.stringLiteral(value.from))\n      );\n    } else {\n      const lastImport = imports.at(-1).$declaration;\n      const lastImportIndex = root.body.indexOf(lastImport);\n      root.body.splice(\n        lastImportIndex + 1,\n        0,\n        b$3.importDeclaration([specifier], b$3.stringLiteral(value.from))\n      );\n    }\n    return true;\n  };\n  const removeImport = (key) => {\n    const item = getAllImports().find((i) => i.local === key);\n    if (!item) {\n      return false;\n    }\n    const node = item.$declaration;\n    const specifier = item.$ast;\n    node.specifiers = node.specifiers.filter((s) => s !== specifier);\n    if (node.specifiers.length === 0) {\n      root.body = root.body.filter((n) => n !== node);\n    }\n    return true;\n  };\n  const proxy = createProxy(\n    root,\n    {\n      $type: \"imports\",\n      $add(item) {\n        updateImport(item.local || item.imported, item, \"prepend\");\n      },\n      $prepend(item) {\n        updateImport(item.local || item.imported, item, \"prepend\");\n      },\n      $append(item) {\n        updateImport(item.local || item.imported, item, \"append\");\n      },\n      get $items() {\n        return getAllImports();\n      },\n      toJSON() {\n        return getAllImports().reduce((acc, i) => {\n          acc[i.local] = i;\n          return acc;\n        }, {});\n      }\n    },\n    {\n      get(_, prop) {\n        return getAllImports().find((i) => i.local === prop);\n      },\n      set(_, prop, value) {\n        return updateImport(prop, value, \"prepend\");\n      },\n      deleteProperty(_, prop) {\n        return removeImport(prop);\n      },\n      ownKeys() {\n        return getAllImports().map((i) => i.local);\n      },\n      has(_, prop) {\n        return getAllImports().some((i) => i.local === prop);\n      }\n    }\n  );\n  return proxy;\n}\n\nfunction proxifyArrayElements(node, elements, mod) {\n  const getItem = (key) => {\n    return elements[key];\n  };\n  const replaceItem = (key, value) => {\n    elements[key] = value;\n  };\n  return createProxy(\n    node,\n    {\n      $type: \"array\",\n      push(value) {\n        elements.push(literalToAst(value));\n      },\n      pop() {\n        return proxify(elements.pop(), mod);\n      },\n      unshift(value) {\n        elements.unshift(literalToAst(value));\n      },\n      shift() {\n        return proxify(elements.shift(), mod);\n      },\n      splice(start, deleteCount, ...items) {\n        const deleted = elements.splice(\n          start,\n          deleteCount,\n          ...items.map((n) => literalToAst(n))\n        );\n        return deleted.map((n) => proxify(n, mod));\n      },\n      find(predicate) {\n        return elements.map((n) => proxify(n, mod)).find(predicate);\n      },\n      findIndex(predicate) {\n        return elements.map((n) => proxify(n, mod)).findIndex(predicate);\n      },\n      includes(value) {\n        return elements.map((n) => proxify(n, mod)).includes(value);\n      },\n      toJSON() {\n        return elements.map((n) => proxify(n, mod));\n      }\n    },\n    {\n      get(_, key) {\n        if (key === \"length\") {\n          return elements.length;\n        }\n        if (key === Symbol.iterator) {\n          return function* () {\n            for (const item of elements) {\n              yield proxify(item, mod);\n            }\n          };\n        }\n        if (typeof key === \"symbol\") {\n          return;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return;\n        }\n        const prop = getItem(index);\n        if (prop) {\n          return proxify(prop, mod);\n        }\n      },\n      set(_, key, value) {\n        if (typeof key === \"symbol\") {\n          return false;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return false;\n        }\n        replaceItem(index, literalToAst(value));\n        return true;\n      },\n      deleteProperty(_, key) {\n        if (typeof key === \"symbol\") {\n          return false;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return false;\n        }\n        elements[index] = literalToAst(void 0);\n        return true;\n      },\n      ownKeys() {\n        return [\"length\", ...elements.map((_, i) => i.toString())];\n      }\n    }\n  );\n}\nfunction proxifyArray(node, mod) {\n  if (!(\"elements\" in node)) {\n    return void 0;\n  }\n  return proxifyArrayElements(node, node.elements, mod);\n}\n\nfunction proxifyFunctionCall(node, mod) {\n  if (node.type !== \"CallExpression\") {\n    throw new MagicastError(\"Not a function call\");\n  }\n  function stringifyExpression(node2) {\n    if (node2.type === \"Identifier\") {\n      return node2.name;\n    }\n    if (node2.type === \"MemberExpression\") {\n      return `${stringifyExpression(node2.object)}.${stringifyExpression(\n        node2.property\n      )}`;\n    }\n    throw new MagicastError(\"Not implemented\");\n  }\n  const argumentsProxy = proxifyArrayElements(node, node.arguments, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"function-call\",\n      $callee: stringifyExpression(node.callee),\n      $args: argumentsProxy\n    },\n    {}\n  );\n}\n\nfunction proxifyArrowFunctionExpression(node, mod) {\n  if (node.type !== \"ArrowFunctionExpression\") {\n    throw new MagicastError(\"Not an arrow function expression\");\n  }\n  const parametersProxy = proxifyArrayElements(node, node.params, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"arrow-function-expression\",\n      $params: parametersProxy,\n      $body: proxify(node.body, mod)\n    },\n    {}\n  );\n}\n\nconst b$2 = khulnasofts$1;\nfunction proxifyObject(node, mod) {\n  if (!(\"properties\" in node)) {\n    return void 0;\n  }\n  const getProp = (key) => {\n    for (const prop of node.properties) {\n      if (\"key\" in prop && \"name\" in prop.key && prop.key.name === key) {\n        return prop.value;\n      }\n      if (prop.type === \"ObjectProperty\" && (prop.key.type === \"StringLiteral\" || prop.key.type === \"NumericLiteral\" || prop.key.type === \"BooleanLiteral\") && prop.key.value.toString() === key) {\n        return prop.value.value ?? prop.value;\n      }\n    }\n  };\n  const getPropName = (prop, throwError = false) => {\n    if (\"key\" in prop && \"name\" in prop.key) {\n      return prop.key.name;\n    }\n    if (prop.type === \"ObjectProperty\" && (prop.key.type === \"StringLiteral\" || prop.key.type === \"NumericLiteral\" || prop.key.type === \"BooleanLiteral\")) {\n      return prop.key.value.toString();\n    }\n    if (throwError) {\n      throw new MagicastError(`Casting \"${prop.type}\" is not supported`, {\n        ast: prop,\n        code: mod?.$code\n      });\n    }\n  };\n  const replaceOrAddProp = (key, value) => {\n    const prop = node.properties.find(\n      (prop2) => getPropName(prop2) === key\n    );\n    if (prop) {\n      prop.value = value;\n    } else if (isValidPropName(key)) {\n      node.properties.push({\n        type: \"Property\",\n        key: {\n          type: \"Identifier\",\n          name: key\n        },\n        value\n      });\n    } else {\n      node.properties.push({\n        type: \"ObjectProperty\",\n        key: b$2.stringLiteral(key),\n        value\n      });\n    }\n  };\n  return createProxy(\n    node,\n    {\n      $type: \"object\",\n      toJSON() {\n        return node.properties.reduce((acc, prop) => {\n          if (\"key\" in prop && \"name\" in prop.key) {\n            acc[prop.key.name] = proxify(prop.value, mod);\n          }\n          return acc;\n        }, {});\n      }\n    },\n    {\n      get(_, key) {\n        const prop = getProp(key);\n        if (prop) {\n          return proxify(prop, mod);\n        }\n      },\n      set(_, key, value) {\n        if (typeof key !== \"string\") {\n          key = String(key);\n        }\n        replaceOrAddProp(key, literalToAst(value));\n        return true;\n      },\n      deleteProperty(_, key) {\n        if (typeof key !== \"string\") {\n          key = String(key);\n        }\n        const index = node.properties.findIndex(\n          (prop) => \"key\" in prop && \"name\" in prop.key && prop.key.name === key\n        );\n        if (index !== -1) {\n          node.properties.splice(index, 1);\n        }\n        return true;\n      },\n      ownKeys() {\n        return node.properties.map((prop) => getPropName(prop, true)).filter(Boolean);\n      }\n    }\n  );\n}\n\nfunction proxifyNewExpression(node, mod) {\n  if (node.type !== \"NewExpression\") {\n    throw new MagicastError(\"Not a new expression\");\n  }\n  function stringifyExpression(node2) {\n    if (node2.type === \"Identifier\") {\n      return node2.name;\n    }\n    if (node2.type === \"MemberExpression\") {\n      return `${stringifyExpression(node2.object)}.${stringifyExpression(\n        node2.property\n      )}`;\n    }\n    throw new MagicastError(\"Not implemented\");\n  }\n  const argumentsProxy = proxifyArrayElements(node, node.arguments, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"new-expression\",\n      $callee: stringifyExpression(node.callee),\n      $args: argumentsProxy\n    },\n    {}\n  );\n}\n\nfunction proxifyIdentifier(node) {\n  if (node.type !== \"Identifier\") {\n    throw new MagicastError(\"Not an identifier\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"identifier\",\n      $name: node.name\n    },\n    {}\n  );\n}\n\nfunction proxifyLogicalExpression(node) {\n  if (node.type !== \"LogicalExpression\") {\n    throw new MagicastError(\"Not a logical expression\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"logicalExpression\"\n    },\n    {}\n  );\n}\n\nfunction proxifyMemberExpression(node) {\n  if (node.type !== \"MemberExpression\") {\n    throw new MagicastError(\"Not a member expression\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"memberExpression\"\n    },\n    {}\n  );\n}\n\nconst _cache = /* @__PURE__ */ new WeakMap();\nfunction proxify(node, mod) {\n  if (LITERALS_TYPEOF.has(typeof node)) {\n    return node;\n  }\n  if (LITERALS_AST.has(node.type)) {\n    return node.value;\n  }\n  if (_cache.has(node)) {\n    return _cache.get(node);\n  }\n  let proxy;\n  switch (node.type) {\n    case \"ObjectExpression\": {\n      proxy = proxifyObject(node, mod);\n      break;\n    }\n    case \"ArrayExpression\": {\n      proxy = proxifyArray(node, mod);\n      break;\n    }\n    case \"CallExpression\": {\n      proxy = proxifyFunctionCall(node, mod);\n      break;\n    }\n    case \"ArrowFunctionExpression\": {\n      proxy = proxifyArrowFunctionExpression(node, mod);\n      break;\n    }\n    case \"NewExpression\": {\n      proxy = proxifyNewExpression(node, mod);\n      break;\n    }\n    case \"Identifier\": {\n      proxy = proxifyIdentifier(node);\n      break;\n    }\n    case \"LogicalExpression\": {\n      proxy = proxifyLogicalExpression(node);\n      break;\n    }\n    case \"MemberExpression\": {\n      proxy = proxifyMemberExpression(node);\n      break;\n    }\n    case \"TSAsExpression\":\n    case \"TSSatisfiesExpression\": {\n      proxy = proxify(node.expression, mod);\n      break;\n    }\n    default: {\n      throw new MagicastError(`Casting \"${node.type}\" is not supported`, {\n        ast: node,\n        code: mod?.$code\n      });\n    }\n  }\n  _cache.set(node, proxy);\n  return proxy;\n}\n\nconst b$1 = khulnasofts$1;\nfunction createExportsProxy(root, mod) {\n  const findExport = (key) => {\n    const type = key === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n    for (const n of root.body) {\n      if (n.type === type) {\n        if (key === \"default\") {\n          return n.declaration;\n        }\n        if (n.declaration && \"declarations\" in n.declaration) {\n          const dec = n.declaration.declarations[0];\n          if (\"name\" in dec.id && dec.id.name === key) {\n            return dec.init;\n          }\n        }\n      }\n    }\n  };\n  const updateOrAddExport = (key, value) => {\n    const type = key === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n    const node = literalToAst(value);\n    for (const n of root.body) {\n      if (n.type === type) {\n        if (key === \"default\") {\n          n.declaration = node;\n          return;\n        }\n        if (n.declaration && \"declarations\" in n.declaration) {\n          const dec = n.declaration.declarations[0];\n          if (\"name\" in dec.id && dec.id.name === key) {\n            dec.init = node;\n            return;\n          }\n        }\n      }\n    }\n    root.body.push(\n      key === \"default\" ? b$1.exportDefaultDeclaration(node) : b$1.exportNamedDeclaration(\n        b$1.variableDeclaration(\"const\", [\n          b$1.variableDeclarator(b$1.identifier(key), node)\n        ])\n      )\n    );\n  };\n  return createProxy(\n    root,\n    {\n      $type: \"exports\"\n    },\n    {\n      get(_, prop) {\n        const node = findExport(prop);\n        if (node) {\n          return proxify(node, mod);\n        }\n      },\n      set(_, prop, value) {\n        updateOrAddExport(prop, value);\n        return true;\n      },\n      ownKeys() {\n        return root.body.flatMap((i) => {\n          if (i.type === \"ExportDefaultDeclaration\") {\n            return [\"default\"];\n          }\n          if (i.type === \"ExportNamedDeclaration\" && i.declaration && \"declarations\" in i.declaration) {\n            return i.declaration.declarations.map(\n              (d) => \"name\" in d.id ? d.id.name : \"\"\n            );\n          }\n          return [];\n        }).filter(Boolean);\n      },\n      deleteProperty(_, prop) {\n        const type = prop === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n        for (let i = 0; i < root.body.length; i++) {\n          const n = root.body[i];\n          if (n.type === type) {\n            if (prop === \"default\") {\n              root.body.splice(i, 1);\n              return true;\n            }\n            if (n.declaration && \"declarations\" in n.declaration) {\n              const dec = n.declaration.declarations[0];\n              if (\"name\" in dec.id && dec.id.name === prop) {\n                root.body.splice(i, 1);\n                return true;\n              }\n            }\n          }\n        }\n        return false;\n      }\n    }\n  );\n}\n\nfunction proxifyModule(ast, code) {\n  const root = ast.program;\n  if (root.type !== \"Program\") {\n    throw new MagicastError(`Cannot proxify ${ast.type} as module`);\n  }\n  const util = {\n    $code: code,\n    $type: \"module\"\n  };\n  const mod = createProxy(root, util, {\n    ownKeys() {\n      return [\"imports\", \"exports\", \"generate\"];\n    }\n  });\n  util.exports = createExportsProxy(root, mod);\n  util.imports = createImportsProxy(root);\n  util.generate = (options) => generateCode(mod, options);\n  return mod;\n}\n\nfunction detectCodeFormat(code, userStyles = {}) {\n  const detect = {\n    wrapColumn: userStyles.wrapColumn === void 0,\n    indent: userStyles.tabWidth === void 0 || userStyles.useTabs === void 0,\n    quote: userStyles.quote === void 0,\n    arrowParens: userStyles.arrowParensAlways === void 0,\n    trailingComma: userStyles.trailingComma === void 0\n  };\n  let codeIndent = 2;\n  let tabUsages = 0;\n  let semiUsages = 0;\n  let maxLineLength = 0;\n  let multiLineTrailingCommaUsages = 0;\n  const syntaxDetectRegex = /(?<doubleQuote>\"[^\"]+\")|(?<singleQuote>'[^']+')|(?<singleParam>\\([^),]+\\)\\s*=>)|(?<trailingComma>,\\s*[\\]}])/g;\n  const syntaxUsages = {\n    doubleQuote: 0,\n    singleQuote: 0,\n    singleParam: 0,\n    trailingComma: 0\n  };\n  const lines = (code || \"\").split(\"\\n\");\n  let previousLineTrailing = false;\n  for (const line of lines) {\n    const trimmitedLine = line.trim();\n    if (trimmitedLine.length === 0) {\n      continue;\n    }\n    if (detect.wrapColumn && line.length > maxLineLength) {\n      maxLineLength = line.length;\n    }\n    if (detect.indent) {\n      const lineIndent = line.match(/^\\s+/)?.[0] || \"\";\n      if (lineIndent.length > 0) {\n        if (lineIndent.length > 0 && lineIndent.length < codeIndent) {\n          codeIndent = lineIndent.length;\n        }\n        if (lineIndent[0] === \"\t\") {\n          tabUsages++;\n        } else if (lineIndent.length > 0) {\n          tabUsages--;\n        }\n      }\n    }\n    if (trimmitedLine.at(-1) === \";\") {\n      semiUsages++;\n    } else if (trimmitedLine.length > 0) {\n      semiUsages--;\n    }\n    if (detect.quote || detect.arrowParens) {\n      const matches = trimmitedLine.matchAll(syntaxDetectRegex);\n      for (const match of matches) {\n        if (!match.groups) {\n          continue;\n        }\n        for (const key in syntaxUsages) {\n          if (match.groups[key]) {\n            syntaxUsages[key]++;\n          }\n        }\n      }\n    }\n    if (detect.trailingComma) {\n      if (line.startsWith(\"}\") || line.startsWith(\"]\")) {\n        if (previousLineTrailing) {\n          multiLineTrailingCommaUsages++;\n        } else {\n          multiLineTrailingCommaUsages--;\n        }\n      }\n      previousLineTrailing = trimmitedLine.endsWith(\",\");\n    }\n  }\n  return {\n    wrapColumn: maxLineLength,\n    useTabs: tabUsages > 0,\n    tabWidth: codeIndent,\n    quote: syntaxUsages.singleQuote > syntaxUsages.doubleQuote ? \"single\" : \"double\",\n    arrowParensAlways: syntaxUsages.singleParam > 0,\n    trailingComma: multiLineTrailingCommaUsages > 0 || syntaxUsages.trailingComma > 0,\n    useSemi: semiUsages > 0,\n    arrayBracketSpacing: void 0,\n    // TODO\n    objectCurlySpacing: void 0,\n    // TODO\n    ...userStyles\n  };\n}\n\nfunction parseModule(code, options) {\n  const node = parse(code, {\n    parser: options?.parser || getBabelParser(),\n    ...options\n  });\n  return proxifyModule(node, code);\n}\nfunction parseExpression(code, options) {\n  const root = parse(\"(\" + code + \")\", {\n    parser: options?.parser || getBabelParser(),\n    ...options\n  });\n  let body = root.program.body[0];\n  if (body.type === \"ExpressionStatement\") {\n    body = body.expression;\n  }\n  if (body.extra?.parenthesized) {\n    body.extra.parenthesized = false;\n  }\n  const mod = {\n    $ast: root,\n    $code: \" \" + code + \" \",\n    $type: \"module\"\n  };\n  return proxify(body, mod);\n}\nfunction generateCode(node, options = {}) {\n  const ast = node.$ast || node;\n  const formatOptions = options.format === false || !(\"$code\" in node) ? {} : detectCodeFormat(node.$code, options.format);\n  const { code, map } = print(ast, {\n    ...options,\n    ...formatOptions\n  });\n  return { code, map };\n}\nasync function loadFile(filename, options = {}) {\n  const contents = await promises.readFile(filename, \"utf8\");\n  options.sourceFileName = options.sourceFileName ?? filename;\n  return parseModule(contents, options);\n}\nasync function writeFile(node, filename, options) {\n  const ast = \"$ast\" in node ? node.$ast : node;\n  const { code, map } = generateCode(ast, options);\n  await promises.writeFile(filename, code);\n  if (map) {\n    await promises.writeFile(filename + \".map\", map);\n  }\n}\n\nconst b = khulnasofts$1;\nconst khulnasofts = {\n  /**\n   * Create a function call node.\n   */\n  functionCall(callee, ...args) {\n    const node = b.callExpression(\n      b.identifier(callee),\n      args.map((i) => literalToAst(i))\n    );\n    return proxifyFunctionCall(node);\n  },\n  /**\n   * Create a new expression node.\n   */\n  newExpression(callee, ...args) {\n    const node = b.newExpression(\n      b.identifier(callee),\n      args.map((i) => literalToAst(i))\n    );\n    return proxifyNewExpression(node);\n  },\n  /**\n   * Create a proxified version of a literal value.\n   */\n  literal(value) {\n    return literalToAst(value);\n  },\n  /**\n   * Parse a raw expression and return a proxified version of it.\n   *\n   * ```ts\n   * const obj = khulnasofts.raw(\"{ foo: 1 }\");\n   * console.log(obj.foo); // 1\n   * ```\n   */\n  raw(code) {\n    return parseExpression(code);\n  }\n};\n\nexport { MagicastError, khulnasofts, detectCodeFormat, generateCode, loadFile, parseExpression, parseModule, writeFile };\n", "import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n  if (poolPtr > rnds8Pool.length - 16) {\n    crypto.randomFillSync(rnds8Pool);\n    poolPtr = 0;\n  }\n\n  return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}", "import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;", "import crypto from 'crypto';\nexport default {\n  randomUUID: crypto.randomUUID\n};", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;", "import * as Sentry from \"@sentry/node\";\nimport { safeFetch } from \"./fetch\";\n\ninterface KVGetRequest {\n  privateKey: string;\n  spaceId: string;\n  docId: string;\n}\n\ninterface KVPutRequest {\n  privateKey: string;\n  spaceId: string;\n  docId: string;\n  /**\n   * Must be an object but not an array. TS is a fool sometimes.\n   * https://stackoverflow.com/a/70448528/1520787\n   */\n  data: Record<string, any> & { length?: never };\n}\n\nconst apiHost = \"https://cdn.khulnasoft.com\";\n\nexport async function putKhulnasoftSpaceKv(kvReq: KVPutRequest) {\n  try {\n    const rsp = await safeFetch(\n      `${apiHost}/api/internal/kv/${kvReq.spaceId}/${kvReq.docId}?apiKey=${kvReq.spaceId}`,\n      {\n        method: \"PUT\",\n        headers: {\n          Authorization: `Bearer ${kvReq.privateKey}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify(kvReq.data),\n      }\n    );\n\n    if (!rsp.ok) {\n      throw new Error(`HTTP ${rsp.status} ${rsp.statusText}`);\n    }\n\n    return rsp.json();\n  } catch (error) {\n    Sentry.captureException(error);\n    console.error(\"PUT failed\", error);\n    return;\n  }\n}\n\nexport async function getKhulnasoftSpaceKv(kvReq: KVGetRequest) {\n  try {\n    const rsp = await safeFetch(\n      `${apiHost}/api/internal/kv/${kvReq.spaceId}/${kvReq.docId}?apiKey=${kvReq.spaceId}`,\n      {\n        headers: {\n          Authorization: `Bearer ${kvReq.privateKey}`,\n        },\n      }\n    );\n\n    if (rsp.status === 404) {\n      Sentry.captureMessage(\"getKhulnasoftSpaceKv 404\");\n      console.warn(\"GET 404\", rsp.url);\n      return null;\n    }\n\n    if (!rsp.ok) {\n      throw new Error(`HTTP ${rsp.status} ${rsp.statusText}`);\n    }\n\n    return rsp.json();\n  } catch (error) {\n    Sentry.captureException(error);\n    console.error(\"GET failed\", error);\n    return;\n  }\n}\n", "import { fetch as fetchPolyfill } from \"undici\";\n\nexport const safeFetch: typeof globalThis.fetch = async (\n  input: RequestInfo | URL,\n  init?: RequestInit\n) => {\n  const fetchFn =\n    \"fetch\" in globalThis ? globalThis.fetch : (fetchPolyfill as any);\n  try {\n    const response = await fetchFn(input, init);\n    return response;\n  } catch (error: unknown) {\n    const url =\n      typeof input === \"string\"\n        ? input\n        : input instanceof URL\n        ? input.toString()\n        : input.url;\n    const method = init?.method || \"GET\";\n    const errorMessage = error instanceof Error ? error.message : String(error);\n    const enhancedError = new Error(\n      `Fetch failed for ${method} ${url}: ${errorMessage}`\n    );\n    if (error instanceof Error) {\n      enhancedError.cause = error;\n    }\n    (enhancedError as any).requestContext = {\n      url,\n      method,\n      headers: init?.headers,\n    };\n    throw enhancedError;\n  }\n};\n", "import * as Sentry from \"@sentry/node\";\nimport * as Amplitude from \"@amplitude/analytics-node\";\n\nexport async function exit(code: number): Promise<never> {\n  if (process.env.NODE_ENV !== \"test\") {\n    try {\n      await Promise.allSettled([Sentry.flush(2000), Amplitude.flush().promise]);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n  process.exit(code);\n}\n", "export const apiAirV2Host =\n  process.env.AIR_HOST || \"https://air-layout-v2-tk43uighdq-uc.a.run.app\";\n", "import type { DevToolsSys } from \"../types\";\nimport { runFigmaMigrate } from \"./download\";\nimport { runFigmaGenerate } from \"./generate\";\nimport { runFigmaPublish } from \"./figma-publish\";\nimport { getCredentials } from \"./credentials\";\nimport { printHelp } from \"./help\";\nimport { bold, bgCyan, bgGreen, white, dim } from \"picocolors\";\nimport { cancel, intro, outro } from \"@clack/prompts\";\nimport { runCommand } from \"packages/create-khulnasoft/install\";\nimport { confirm } from \"@clack/prompts\";\nimport { exit } from \"./exit\";\nimport { findPackageJson } from \"../common/fs\";\nimport { track } from \"./track\";\nimport type { CLIArgs } from \".\";\n\nexport const runFigmaCommand = async (\n  sys: DevToolsSys,\n  subCommand: string,\n  args: CLIArgs\n) => {\n  if (!args.skipInstallation && (await shouldInstallKhulnasoft(sys))) {\n    const shouldInstall =\n      args.yes ||\n      (await confirm({\n        message:\n          \"Welcome to Khulnasoft.com! Would you like to set up your integration now?\",\n        active: \"Yes, let's integrate!\",\n        inactive: \"No, I'll do it later\",\n      }));\n    if (shouldInstall) {\n      const passed = await runCommand(\n        \"npm\",\n        [\"init\", \"khulnasoft.com@latest\", \"--\", \"--skip-question\"],\n        {\n          stdio: \"inherit\",\n          cwd: sys.getAppRootDir(),\n        }\n      ).command;\n      if (!passed) {\n        cancel(\n          `Auto-install failed. You can install it manually by running ${bold(\n            \"npm init khulnasoft.com@latest\"\n          )}`\n        );\n        await exit(1);\n      }\n    } else {\n      cancel(\n        `Ok, you can install it later. By running ${bold(\n          \"npm init khulnasoft.com@latest\"\n        )}`\n      );\n    }\n  }\n\n  if (subCommand === \"migrate\") {\n    await runFigmaMigrate(sys, args);\n  } else if (subCommand === \"publish\" || subCommand === \"p\") {\n    await runFigmaPublish(sys, args);\n  } else if (\n    subCommand === \"add\" ||\n    subCommand === \"generate\" ||\n    subCommand === \"gen\" ||\n    subCommand === \"g\"\n  ) {\n    await runFigmaGenerate(sys, args);\n  } else if (subCommand === \"auth\") {\n    console.log(\"\");\n    intro(bgCyan(bold(white(\" figma auth \"))) + `  ` + dim(VERSION));\n    const { khulnasoftPublicKey: spaceId } = await getCredentials(sys, args, {\n      figmaAuth: true,\n      khulnasoftPrivateKey: true,\n      khulnasoftPublicKey: true,\n      force: true,\n    });\n    track(\"figma auth\", {\n      spaceId,\n    });\n    outro(bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))));\n  } else if (subCommand === \"help\") {\n    printHelp(args._[2]);\n  }\n};\n\nasync function shouldInstallKhulnasoft(sys: DevToolsSys): Promise<boolean> {\n  const frameworks = sys.getFrameworks();\n  const supportedFrameworks = [\"next\", \"angular\", \"@angular/core\"];\n  if (\n    !frameworks.some((framework) =>\n      supportedFrameworks.includes(framework.name)\n    )\n  ) {\n    return false;\n  }\n  try {\n    const pkg = await findPackageJson(sys, sys.getRepoRootDir());\n    if (!pkg) {\n      return false;\n    }\n    const hasDevTools =\n      !!pkg.devDependencies?.[\"@khulnasoft.com/dev-tools\"] ||\n      !!pkg.dependencies?.[\"@khulnasoft.com/dev-tools\"];\n    if (hasDevTools) {\n      return false;\n    }\n  } catch (error) {\n    return false;\n  }\n  return true;\n}\ndeclare const VERSION: string;\n", "import type { ChildProcess, SpawnOptions } from \"node:child_process\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport detectPackageManager from \"which-pm-runs\";\nimport spawn from \"cross-spawn\";\nimport * as Sentry from \"@sentry/node\";\n\nexport function installDeps(\n  pkgMgr: string,\n  cwd: string,\n  depNames: string[],\n  isDevDependency: boolean = false\n) {\n  const args: string[] = [];\n\n  if (pkgMgr === \"yarn\") {\n    args.push(\"add\");\n    if (isDevDependency) {\n      args.push(\"--dev\");\n    }\n  } else {\n    args.push(\"install\");\n    if (isDevDependency) {\n      args.push(\"--save-dev\");\n    }\n  }\n\n  depNames.forEach((depName) => {\n    args.push(depName);\n  });\n\n  return runCommand(pkgMgr, args, {\n    stdio: \"ignore\",\n    env: {\n      ...process.env,\n      ADBLOCK: \"1\",\n      DISABLE_OPENCOLLECTIVE: \"1\",\n      // set NODE_ENV to development cuz\n      // pnpm skips dev deps when in production\n      NODE_ENV: \"development\",\n    },\n    cwd,\n  });\n}\n\nexport function manualPackageDepUpdates(\n  rootDir: string,\n  deps: string[],\n  isDevDependency: boolean = false\n) {\n  const pkgJsonPath = join(rootDir, \"package.json\");\n  const pkgJson = JSON.parse(readFileSync(pkgJsonPath, \"utf8\"));\n\n  const targetDeps = isDevDependency ? \"devDependencies\" : \"dependencies\";\n\n  pkgJson[targetDeps] = pkgJson[targetDeps] || {};\n\n  deps.forEach((dep) => {\n    pkgJson[targetDeps][dep] = \"latest\";\n  });\n  writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + \"\\n\");\n}\n\nexport function runCommand(\n  cmd: string,\n  args: string[],\n  options?: SpawnOptions\n) {\n  let child: ChildProcess;\n\n  const command = new Promise<boolean>((resolve) => {\n    try {\n      child = spawn(cmd, args, {\n        stdio: \"inherit\",\n        ...options,\n      });\n\n      child.on(\"error\", (e) => {\n        Sentry.captureException(e);\n        resolve(false);\n      });\n\n      child.on(\"close\", (code) => {\n        if (code === 0) {\n          resolve(true);\n        } else {\n          Sentry.captureMessage(\n            `cmd \"${cmd} ${args.join(\" \")}\", exit code: ${code}`,\n            \"error\"\n          );\n          resolve(false);\n        }\n      });\n    } catch (e: any) {\n      Sentry.captureException(e);\n      resolve(false);\n    }\n  });\n\n  const abort = async () => {\n    if (child) {\n      child.kill(\"SIGINT\");\n    }\n  };\n\n  return { abort, command };\n}\n\nexport function getPackageManager(cwd: string) {\n  try {\n    if (existsSync(join(cwd, \"pnpm-lock.yaml\"))) {\n      return \"pnpm\";\n    }\n    if (existsSync(join(cwd, \"yarn.lock\"))) {\n      return \"yarn\";\n    }\n    if (existsSync(join(cwd, \"package-lock.json\"))) {\n      return \"npm\";\n    }\n  } catch (e) {\n    Sentry.captureException(e);\n  }\n\n  try {\n    const detected = detectPackageManager();\n    if (detected?.name) {\n      return detected.name;\n    }\n  } catch (e) {\n    Sentry.captureException(e);\n  }\n\n  return \"npm\";\n}\n\nexport function getRunCommand(pkgManager: string) {\n  if (pkgManager === \"pnpm\" || pkgManager === \"yarn\") {\n    return pkgManager;\n  }\n  return `npm run`;\n}\n", "import {\n  log,\n  text,\n  isCancel,\n  spinner,\n  confirm,\n  intro,\n  cancel,\n} from \"@clack/prompts\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n  existsSync,\n  mkdirSync,\n  writeFileSync,\n  readFileSync,\n  statSync,\n} from \"node:fs\";\nimport { createDevToolsNodeSys } from \"../../node/node-sys\";\nimport { prettierFormat } from \"../prettier\";\nimport { bold, bgCyan, white, dim } from \"picocolors\";\nimport type {\n  AddCliOptions,\n  FileNode,\n  FolderNode,\n  Snippet,\n  SyncInfo,\n} from \"../../types\";\nimport { exit } from \"../exit\";\nimport { safeFetch } from \"../fetch\";\n\nexport async function addCommand(\n  opts: AddCliOptions\n): Promise<SyncInfo | undefined> {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" add \"))) + `  ` + dim(VERSION));\n\n  const id = opts.snippetId;\n  if (!id && !opts.snippet) {\n    cancel(\"SnippetId expected. npx khulnasoft.com add <snippetId>\");\n    return await exit(1);\n  }\n\n  const s = spinner();\n  let snippet = opts.snippet || null;\n  if (!snippet && id) {\n    s.start(`Fetching snippet ${id}`);\n    snippet = await fetchSnippet(id);\n    s.stop(`Fetched snippet ${id}`);\n  }\n  if (!snippet) {\n    throw new Error(`No snippet found for id ${id}`);\n  }\n  if (snippet.files?.length > 0) {\n    const rootPath = suggestRootPath(snippet.framework || \"react\");\n    const pathInput =\n      opts.path ||\n      (await text({\n        message: \"Where should we copy the files?\",\n        initialValue: rootPath,\n        validate(value) {\n          if (value.length === 0) {\n            return `File path is required!`;\n          }\n          if (value[0] !== \".\") return \"Please enter a relative path.\";\n        },\n      }));\n    if (isCancel(pathInput)) {\n      cancel(\"Cancelled sync\");\n      return await exit(0);\n    }\n    const writtenFiles = await writeFiles(\n      snippet,\n      snippet.files,\n      pathInput,\n      false\n    );\n    log.success(`All files have been written successfully.`);\n    return {\n      snippet,\n      pathInput,\n      writtenFiles,\n      timeStamp: Date.now(),\n    };\n  } else {\n    let { code, suggestedName, framework } = snippet;\n    if (framework) {\n      if (framework !== \"html\") {\n        if (\n          !existsSync(\"./package.json\") &&\n          !existsSync(\"./project.json\") &&\n          !existsSync(\"./tsconfig.json\")\n        ) {\n          throw new Error(\n            \"Current working directory does not look like a code project. Are you in the right directory?\"\n          );\n        }\n      }\n      // new code saved, we started recently saving that\n      suggestedName = await suggestComponentPath(framework, code);\n    }\n    suggestedName ??= `./src/components/MyComponent.jsx`;\n\n    let formatted = addKhulnasoftSignature(\n      snippet,\n      removeCodeDelimiters(snippet.code),\n      snippet.framework\n    );\n    try {\n      if (snippet.framework === \"html\") {\n        formatted = await prettierFormat(formatted, \"html\");\n      } else if (snippet.framework === \"angular\") {\n        formatted = await prettierFormat(formatted, \"angular\");\n      } else if (snippet.framework === \"vue\") {\n        formatted = await prettierFormat(formatted, \"vue\");\n      } else if (snippet.framework === \"svelte\") {\n        formatted = await prettierFormat(formatted, \"html\");\n      } else {\n        formatted = await prettierFormat(formatted, \"typescript\");\n      }\n    } catch (e) {\n      // ignore crashed prettier\n    }\n\n    let pathInput: string | symbol = opts.path!;\n\n    if (!pathInput) {\n      try {\n        const sys = await createDevToolsNodeSys({\n          cwd: process.cwd(),\n        });\n        const frameworks = sys.getFrameworks();\n\n        if (frameworks.length > 0) {\n          let projectFramework: string;\n\n          if (frameworks.some((f) => f.name.includes(\"qwik\"))) {\n            projectFramework = \"qwik\";\n          } else if (frameworks.some((f) => f.name.includes(\"react\"))) {\n            projectFramework = \"react\";\n          } else {\n            projectFramework = frameworks[0].name;\n          }\n\n          if (snippet.framework && snippet.framework !== projectFramework) {\n            const shouldContinue = await confirm({\n              message: `This snippet is for ${snippet.framework}, but you are using ${projectFramework}. Continue?`,\n              initialValue: false,\n            });\n            if (isCancel(shouldContinue) || !shouldContinue) {\n              console.log(\n                `Please go back to khulnasoft and change the output framework to match your project.`\n              );\n              console.log();\n              return await exit(0);\n            }\n          }\n        }\n      } catch (e) {\n        // probably in a project that isn't supported by dev tools\n      }\n\n      pathInput = await text({\n        message: \"Where should we copy the code?\",\n        initialValue: suggestedName?.startsWith(\"./\")\n          ? suggestedName\n          : `./${suggestedName}`,\n        validate(value) {\n          if (value.length === 0) {\n            return `File path is required!`;\n          }\n          if (value[0] !== \".\") return \"Please enter a relative path.\";\n        },\n      });\n      if (isCancel(pathInput)) {\n        console.log(``);\n        return await exit(0);\n      }\n    }\n\n    let componentDir = process.cwd();\n    const componentFilePath = resolve(componentDir, pathInput);\n    log.info(`Writing code to ${componentFilePath}`);\n    mkdirSync(dirname(componentFilePath), { recursive: true });\n    writeFileSync(componentFilePath, formatted);\n  }\n}\n\nexport function fetchSnippet(id: string): Promise<Snippet | null> {\n  return safeFetch(`https://cdn.khulnasoft.com/api/v1/snippet/${id}`).then(\n    (res) => {\n      if (res.status === 404) {\n        return null;\n      }\n      return res.json();\n    }\n  );\n}\n\nfunction removeCodeDelimiters(str: string) {\n  return str.replace(/^```jsx\\s?|\\s?```$/g, \"\").trim();\n}\n\nfunction addKhulnasoftSignature(\n  snippet: Snippet,\n  str: string,\n  framework?: string,\n  addSessionLink = false\n) {\n  if (!framework) {\n    return str;\n  }\n\n  const baseComment = \"This code was generated by Khulnasoft.com\";\n  const link = addSessionLink\n    ? `https://khulnasoft.com/content/${snippet.contentId}?codeSession=${snippet.sessionKey}&sid=${snippet.id}`\n    : \"\";\n\n  const isHtmlLike = [\"vue\", \"html\", \"svelte\"].includes(\n    framework.toLowerCase()\n  );\n  const commentLines = [baseComment, link].filter(Boolean);\n\n  const comments = isHtmlLike\n    ? commentLines.map((line) => `<!-- ${line} -->`).join(\"\\n\")\n    : `/**\\n${commentLines.map((line) => ` * ${line}`).join(\"\\n\")}\\n */`;\n\n  return `${comments}\\n${str}`;\n}\n\nasync function suggestComponentPath(framework: string, content: string) {\n  let path;\n  const componentName = detectComponentName(content, framework.toLowerCase());\n\n  switch (framework.toLowerCase()) {\n    case \"react\":\n      const isTypescript = await detectTypescript();\n      path = `components/${componentName || \"MyComponent\"}.${\n        isTypescript ? \"tsx\" : \"jsx\"\n      }`;\n      break;\n    case \"angular\":\n      path = `app/components/${componentName || \"my-component\"}.component.ts`;\n      break;\n    case \"vue\":\n      path = `components/${componentName || \"MyComponent\"}.vue`;\n      break;\n    case \"svelte\":\n      path = `components/${componentName || \"MyComponent\"}.svelte`;\n      break;\n    case \"html\":\n      path = `${componentName || \"my-design\"}.html`;\n      break;\n    case \"qwik\":\n      path = `components/${componentName || \"MyComponent\"}.tsx`;\n      break;\n    default:\n      path = \"components/MyComponent.tsx\";\n  }\n\n  path = existsSync(\"./src\") ? `./src/${path}` : `./${path}`;\n\n  return path;\n}\n\nasync function detectTypescript() {\n  if (existsSync(\"./tsconfig.json\")) {\n    return true;\n  }\n  const packageJSON = readFileSync(\"./package.json\", \"utf-8\");\n  if (!packageJSON) {\n    throw new Error(\"No package.json found\");\n  }\n  return packageJSON.includes(\"typescript\");\n}\n\nfunction detectComponentName(content: string, framework: string) {\n  const frameworkNaming: Record<string, RegExp> = {\n    vue: /name:\\s*'([^']+)'/,\n    react: /function (\\w+)\\([\\w\\W]+\\)/,\n    qwik: /export const (\\w+) = component\\$/,\n    angular: /selector:\\s*'([^']+)'/,\n  };\n  if (!frameworkNaming[framework]) {\n    return null;\n  }\n  const match = content.match(frameworkNaming[framework]);\n\n  if (framework === \"react\" && !match?.[1]) {\n    // if no match for react, let's try to find a const Component = () => {} declaration\n    const match = content.match(/const (\\w+)[\\w\\W]+=\\s*\\(/);\n    return match?.[1] || null;\n  }\n\n  return match?.[1] || null;\n}\n\nexport async function writeFiles(\n  snippet: Snippet,\n  files: Array<FileNode | FolderNode>,\n  rootPath: string,\n  addSessionLink: boolean\n) {\n  let results: Array<FileNode> = [];\n  for (const item of files) {\n    const itemPath = combinePaths(rootPath, item.path);\n    const fullPath = resolve(process.cwd(), itemPath);\n\n    if (\"code\" in item) {\n      const formatted = await formatCode(\n        snippet,\n        item.code,\n        getParserForFile(item.path),\n        addSessionLink\n      );\n      mkdirSync(dirname(fullPath), { recursive: true });\n      writeFileSync(fullPath, formatted);\n      results.push({\n        ...item,\n        path: itemPath,\n        code: formatted,\n        timestamp: statSync(fullPath).mtime.getTime(),\n      });\n      log.info(`Writing file to ${fullPath}`);\n    } else {\n      // It's a FolderNode\n      mkdirSync(fullPath, { recursive: true });\n      results = results.concat(\n        await writeFiles(snippet, item.files, itemPath, addSessionLink)\n      );\n    }\n  }\n  return results;\n}\n\nfunction combinePaths(rootPath: string, itemPath: string): string {\n  // Normalize paths by removing leading and trailing slashes\n  const normalizedRoot = rootPath.replace(/^\\.?\\/+|\\/+$/g, \"\");\n  const normalizedItem = itemPath.replace(/^\\.?\\/+|\\/+$/g, \"\");\n\n  // Split the paths into segments\n  const rootSegments = normalizedRoot.split(\"/\").filter(Boolean);\n  const itemSegments = normalizedItem.split(\"/\").filter(Boolean);\n\n  // Find the last common segment\n  let lastCommonIndex = -1;\n  for (let i = 0; i < rootSegments.length; i++) {\n    const index = itemSegments.indexOf(rootSegments[i]);\n    if (index !== -1) {\n      lastCommonIndex = index;\n    }\n  }\n\n  // Combine the paths\n  const resultSegments = [\n    ...rootSegments,\n    ...itemSegments.slice(lastCommonIndex + 1),\n  ];\n\n  return resultSegments.join(\"/\");\n}\n\nfunction getParserForFile(filePath: string): string {\n  const extension = filePath.split(\".\").pop()?.toLowerCase();\n  switch (extension) {\n    case \"html\":\n    case \"svelte\":\n      return \"html\";\n    case \"vue\":\n      return \"vue\";\n    case \"ts\":\n    case \"tsx\":\n    case \"js\":\n    case \"jsx\":\n      return \"typescript\";\n    case \"css\":\n      return \"css\";\n    case \"json\":\n      return \"json\";\n    default:\n      return \"typescript\";\n  }\n}\n\nasync function formatCode(\n  snippet: Snippet,\n  code: string,\n  parser: string,\n  addSessionLink: boolean\n): Promise<string> {\n  let codeToFormat = code;\n  try {\n    codeToFormat = await prettierFormat(code, parser);\n  } catch (e) {\n    // ignore crashed prettier\n  }\n  return addSessionLink\n    ? addKhulnasoftSignature(snippet, codeToFormat, parser, addSessionLink)\n    : codeToFormat;\n}\n\nexport function suggestRootPath(framework: string) {\n  const hasSrcFolder = existsSync(join(process.cwd(), \"src\"));\n  const srcPrefix = hasSrcFolder ? \"src/\" : \"\";\n\n  switch (framework.toLowerCase()) {\n    case \"angular\":\n      return `./${srcPrefix}app/components/`;\n    case \"html\":\n      return `./`;\n    default:\n      return `./${srcPrefix}components/`;\n  }\n}\n\ndeclare const VERSION: string;\n", "import type { AddCliOptions } from \"packages/dev-tools/types\";\n\nexport function getOptions(cwd: string, args: string[]) {\n  const opts: AddCliOptions = {\n    cwd,\n    command: args[0],\n    snippetId: args[1],\n    path: args[2],\n  };\n\n  return opts;\n}\n", "import { dirname, relative, resolve, sep } from \"path\";\nimport type {\n  AddCliOptions,\n  DevToolsSys,\n  FileNode,\n  Snippet,\n  SyncInfo,\n} from \"../types\";\nimport {\n  existsSync,\n  readdirSync,\n  readFileSync,\n  rmdirSync,\n  statSync,\n  unlinkSync,\n} from \"fs\";\nimport { glob } from \"glob\";\nimport { createDevTools } from \"../core\";\nimport { createDevToolsServer } from \"../server\";\nimport {\n  fetchSnippet,\n  suggestRootPath,\n  writeFiles,\n} from \"./khulnasoft-add/interface\";\nimport { log, text, isCancel, cancel } from \"@clack/prompts\";\nimport chokidar from \"chokidar\";\nimport ignore from \"ignore\";\n\n// Helper to extract signature info from file content\nexport function extractSignatureInfo(content: string): {\n  contentId?: string;\n  sessionKey?: string;\n  snippetId?: string;\n} {\n  const matches = content.match(\n    /khulnasoft\\.io\\/content\\/([^?]+)\\?codeSession=([^&]+)&sid=([^\\s]+)/\n  );\n  if (!matches) return {};\n  return {\n    contentId: matches[1],\n    sessionKey: matches[2],\n    snippetId: matches[3],\n  };\n}\n\nexport async function getAllProjectFiles(basePath: string): Promise<string[]> {\n  const ig = getIgnorePatterns(basePath);\n  const files = await glob(\"**/*\", {\n    cwd: basePath,\n    ignore: {\n      ignored(p) {\n        return ig(p.relative());\n      },\n    },\n    nodir: true,\n  });\n  return files;\n}\n\nexport async function findKhulnasoftFiles(\n  basePath: string,\n  targetContentId: string,\n  targetSessionKey: string\n): Promise<FileNode[]> {\n  const files = await glob(\"**/*\", {\n    cwd: basePath,\n    ignore: [\"node_modules/**\"],\n    nodir: true,\n  });\n\n  const khulnasoftFiles: FileNode[] = [];\n\n  for (const file of files) {\n    const fullPath = resolve(basePath, file);\n    try {\n      const content = readFileSync(fullPath, \"utf-8\");\n      if (content.includes(\"This code was generated by Khulnasoft.com\")) {\n        const sigInfo = extractSignatureInfo(content);\n\n        // Skip if we're looking for specific content/session and this doesn't match\n        if (targetContentId && targetSessionKey) {\n          if (\n            sigInfo.contentId !== targetContentId ||\n            sigInfo.sessionKey !== targetSessionKey\n          ) {\n            continue;\n          }\n        }\n\n        khulnasoftFiles.push({\n          path: file,\n          code: removeKhulnasoftSignature(content),\n          name: file.split(\"/\").pop() || \"\",\n          timestamp: statSync(fullPath).mtime.getTime(),\n          snippetId: sigInfo.snippetId,\n        });\n      }\n    } catch (error) {\n      console.error(`Error reading file ${fullPath}:`, error);\n    }\n  }\n\n  return khulnasoftFiles;\n}\n\nfunction isMatchingKhulnasoftFile(content: string, snippet: Snippet): boolean {\n  const sigInfo = extractSignatureInfo(content);\n  return (\n    sigInfo.contentId === snippet.contentId &&\n    sigInfo.sessionKey === snippet.sessionKey\n  );\n}\n\nexport function getIgnorePatterns(basePath: string): (path: string) => boolean {\n  // Default patterns that should always be ignored\n  const defaultPatterns = [\n    \"*.png\",\n    \"*.jpg\",\n    \"*.jpeg\",\n    \"*.gif\",\n    \"*.webp\",\n    \"*.yml\",\n    \"*.yaml\",\n    \"*.snap\",\n    \"*.liquid\",\n    \".git\",\n    \".DS_Store\",\n    \".vscode\",\n    \"node_modules\",\n    \".next\",\n    \"coverage\",\n    \"example\",\n    \"public\",\n    \"yarn.lock\",\n    \"pnpm-lock.yaml\",\n    \"__snapshots__\",\n    \"package-lock.json\",\n  ];\n\n  const ig = ignore().add(defaultPatterns);\n\n  function tryAddIgnoreFile(path: string) {\n    try {\n      const ignorePath = resolve(basePath, path);\n      if (existsSync(ignorePath)) {\n        const gitignoreContent = readFileSync(ignorePath, \"utf8\");\n        ig.add(gitignoreContent);\n      }\n    } catch (error) {\n      console.debug(`No ${path} found or error reading it:`, error);\n    }\n  }\n  // Try to read .gitignore\n  tryAddIgnoreFile(\".gitignore\");\n  tryAddIgnoreFile(\".prettierignore\");\n  tryAddIgnoreFile(\".khulnasoftignore\");\n\n  return (path: string): boolean => {\n    const relativePath = relative(basePath, path);\n    if (!relativePath) return false;\n    // ignore package handles forward slashes only\n    const normalizedPath = relativePath.split(sep).join(\"/\");\n    return ig.ignores(normalizedPath);\n  };\n}\nexport function watchDirectory(\n  basePath: string,\n  syncInfo: SyncInfo,\n  onChange: (updatedSyncInfo: SyncInfo) => void\n) {\n  const ig = getIgnorePatterns(basePath);\n\n  const watcher = chokidar.watch(basePath, {\n    ignored: ig,\n    ignoreInitial: true,\n    awaitWriteFinish: {\n      stabilityThreshold: 500,\n      pollInterval: 600,\n    },\n    ignorePermissionErrors: true,\n    followSymlinks: false,\n    atomic: 600,\n  });\n\n  const handleFileUpdate = async (fullPath: string) => {\n    const relativePath = relative(basePath, fullPath);\n    try {\n      const content = readFileSync(fullPath, \"utf-8\");\n      if (isMatchingKhulnasoftFile(content, syncInfo.snippet)) {\n        const existingFile = syncInfo.writtenFiles.find(\n          (f) => f.path === relativePath\n        );\n        if (existingFile) {\n          existingFile.code = removeKhulnasoftSignature(content);\n          existingFile.timestamp = Date.now();\n        } else {\n          // New file appeared with matching signature\n          syncInfo.writtenFiles.push({\n            path: relativePath,\n            code: removeKhulnasoftSignature(content),\n            timestamp: Date.now(),\n            name: relativePath.split(\"/\").pop() || \"\",\n          });\n        }\n        syncInfo.timeStamp = Date.now();\n        onChange(syncInfo);\n      }\n    } catch (error) {\n      console.debug(`Error reading file ${fullPath}:`, error);\n    }\n  };\n\n  // Set up event handlers\n  watcher\n    .on(\"add\", async (path) => {\n      log.info(`File added: ${path}`);\n      await handleFileUpdate(path);\n    })\n    .on(\"change\", async (path) => {\n      log.info(`File changed: ${path}`);\n      await handleFileUpdate(path);\n    })\n    .on(\"unlink\", (path) => {\n      log.info(`File deleted: ${path}`);\n      const relativePath = relative(basePath, path);\n      syncInfo.writtenFiles = syncInfo.writtenFiles.filter(\n        (f) => f.path !== relativePath\n      );\n      syncInfo.timeStamp = Date.now();\n      onChange(syncInfo);\n    })\n    .on(\"unlinkDir\", (path) => {\n      log.info(`Folder deleted: ${path}`);\n      const relativePath = relative(basePath, path);\n      syncInfo.writtenFiles = syncInfo.writtenFiles.filter(\n        (f) => !f.path.startsWith(relativePath)\n      );\n      syncInfo.timeStamp = Date.now();\n      onChange(syncInfo);\n    })\n    .on(\"ready\", () => {\n      console.debug(\"Initial scan complete. Ready for changes.\");\n    })\n    .on(\"error\", (error) => {\n      console.error(`Watcher error: ${error}`);\n    });\n\n  // Handle file moves/renames\n  watcher.on(\"raw\", async (event, path, details) => {\n    // todo: handle windows\n    if (event === \"renamed\") {\n      log.info(`File renamed: ${details.oldPath} -> ${path}`);\n      const oldPath = details.oldPath\n        ? relative(basePath, details.oldPath)\n        : undefined;\n      const newPath = path ? relative(basePath, path) : undefined;\n\n      if (oldPath && newPath) {\n        const fileInfo = syncInfo.writtenFiles.find((f) => f.path === oldPath);\n        if (fileInfo) {\n          fileInfo.path = newPath;\n          syncInfo.timeStamp = Date.now();\n          onChange(syncInfo);\n        }\n      }\n    }\n  });\n\n  // Return cleanup function\n  const cleanup = async () => {\n    await watcher.close();\n  };\n\n  process.on(\"SIGINT\", cleanup);\n  process.on(\"SIGTERM\", cleanup);\n\n  return cleanup;\n}\nexport async function setupSyncServer(\n  sys: DevToolsSys,\n  initialSyncInfo?: SyncInfo\n) {\n  sys.debug(\"khulnasoft sync server init\");\n  const devTools = await createDevTools(sys);\n  let syncInfo = initialSyncInfo;\n  let cleanupWatcher = () => Promise.resolve();\n\n  if (syncInfo) {\n    setTimeout(() => {\n      cleanupWatcher = watchDirectory(process.cwd(), syncInfo!, (updated) => {\n        syncInfo = updated;\n      });\n    }, 1000);\n  }\n\n  await createDevToolsServer({\n    ...devTools,\n    ensureFigmaImportPage: () => {\n      return Promise.reject(\"Not supported\");\n    },\n    getPastSyncInfo: ({ sessionKey, since }) => {\n      if (!syncInfo || sessionKey !== syncInfo.snippet.sessionKey) {\n        return null;\n      }\n      return {\n        ...syncInfo,\n        hasChanged: syncInfo.timeStamp > since,\n      };\n    },\n    resyncSnippet: async (data) => {\n      await cleanupWatcher(); // Clean up existing watcher\n\n      const newSyncInfo = await syncCommand({\n        path: syncInfo?.pathInput,\n        snippet: data.snippet,\n        cwd: process.cwd(),\n      });\n\n      if (newSyncInfo) {\n        syncInfo = newSyncInfo;\n        cleanupWatcher = watchDirectory(process.cwd(), syncInfo, (updated) => {\n          syncInfo = updated;\n        });\n      }\n\n      return syncInfo;\n    },\n\n    getClientId: () => \"khulnasoft-sync-cli\",\n\n    closeAppServer: async () => {\n      await cleanupWatcher();\n    },\n\n    restartAppServer: async () => {\n      sys.debug(\"restart server\");\n    },\n\n    enableAppWatch: async (enable) => {\n      return enable;\n    },\n\n    ...sys,\n  });\n}\n\nexport async function syncCommand(\n  opts: AddCliOptions\n): Promise<SyncInfo | undefined> {\n  const id = opts.snippetId;\n  let snippet = opts.snippet || null;\n\n  if (!snippet && id) {\n    snippet = await fetchSnippet(id);\n  }\n\n  if (!snippet) {\n    throw new Error(`No snippet found for id ${id}`);\n  }\n\n  // Check for existing files with same signature\n  const existingFiles = await findKhulnasoftFiles(\n    process.cwd(),\n    snippet.contentId,\n    snippet.sessionKey\n  );\n  const matchingFiles = existingFiles.filter(\n    (f) => f.snippetId === snippet!.id\n  );\n  log.info(\n    `Found ${matchingFiles.length} matching files for snippet ${snippet.id} in existing files ${existingFiles.length}`\n  );\n\n  if (matchingFiles.length > 0) {\n    // Found snippet files pre-synced, create syncInfo without writing\n    const latestTimestamp = Math.max(\n      ...matchingFiles.map((f) => f.timestamp || 0)\n    );\n    return {\n      snippet,\n      writtenFiles: matchingFiles,\n      pathInput: findCommonPath(matchingFiles.map((f) => f.path)),\n      timeStamp: latestTimestamp,\n    };\n  }\n\n  const rootPath = suggestRootPath(snippet.framework || \"react\");\n  const pathInput =\n    opts.path ||\n    findCommonPath(existingFiles.map((f) => f.path)) ||\n    (await text({\n      message: \"Where should we copy the files?\",\n      initialValue: rootPath,\n      validate(value) {\n        if (value.length === 0) {\n          return `File path is required!`;\n        }\n        if (value[0] !== \".\") return \"Please enter a relative path.\";\n      },\n    }));\n  if (isCancel(pathInput)) {\n    cancel(\"Cancelled sync\");\n    process.exit(0);\n  }\n\n  // remove older snippet files for in favor of new ones\n  for (const file of existingFiles) {\n    const fullPath = resolve(process.cwd(), file.path);\n    try {\n      unlinkSync(fullPath);\n      log.info(`Deleted old file: ${fullPath}`);\n\n      const parentDir = dirname(fullPath);\n      if (readdirSync(parentDir).length === 0) {\n        rmdirSync(parentDir);\n        log.info(`Deleted empty folder: ${parentDir}`);\n      }\n    } catch (error) {\n      log.error(`Error cleaning up file ${fullPath}: ${error}`);\n    }\n  }\n\n  // Write new files and create syncInfo\n  const writtenFiles = await writeFiles(\n    snippet,\n    snippet.files,\n    pathInput,\n    true\n  );\n  log.success(`All files have been written successfully.`);\n  const latestTimestamp = Math.max(\n    ...writtenFiles.map((f) => f.timestamp || 0)\n  );\n  return {\n    snippet,\n    writtenFiles: writtenFiles.map((f) => ({\n      ...f,\n      code: removeKhulnasoftSignature(f.code),\n    })),\n    pathInput,\n    timeStamp: latestTimestamp || Date.now(),\n  };\n}\n\nfunction removeKhulnasoftSignature(str: string) {\n  if (!str) {\n    return str;\n  }\n\n  // For HTML-style comments\n  const htmlSignatureRegex =\n    /<!--\\s*This code was generated by Khulnasoft\\.io\\s*-->\\s*(?:<!--\\s*https:\\/\\/khulnasoft\\.io\\/content\\/[a-f0-9]+\\?codeSession=[a-f0-9]+&sid=[a-f0-9]+\\s*-->\\s*)?/;\n\n  // For code-style comments\n  const codeSignatureRegex =\n    /\\/\\*\\*\\s*\\n\\s*\\* This code was generated by Khulnasoft\\.io\\s*\\n\\s*\\* https:\\/\\/khulnasoft\\.io\\/content\\/[a-f0-9]+\\?codeSession=[a-f0-9]+&sid=[a-f0-9]+\\s*\\n\\s*\\*\\/\\s*/;\n\n  // Try removing HTML-style signature first\n  let cleaned = str\n    .replace(htmlSignatureRegex, \"\")\n    .replace(codeSignatureRegex, \"\");\n  // Remove any leading newlines that might be left over\n  cleaned = cleaned.replace(/^\\n+/, \"\");\n  return cleaned;\n}\n\nfunction findCommonPath(paths: string[]): string {\n  if (paths.length === 0) {\n    return \"\";\n  }\n  if (paths.length === 1) {\n    return `./${paths[0].slice(0, paths[0].lastIndexOf(\"/\") + 1)}`;\n  }\n  // Split paths into segments\n  const segments = paths.map((path) => path.split(\"/\"));\n  const minLength = Math.min(...segments.map((seg) => seg.length));\n  let commonSegments: string[] = [];\n  for (let i = 0; i < minLength; i++) {\n    const segment = segments[0][i];\n    if (segments.every((path) => path[i] === segment)) {\n      commonSegments.push(segment);\n    } else {\n      break;\n    }\n  }\n\n  // Join common segments back into a path\n  return `./${commonSegments.join(\"/\")}`;\n}\n", "import type { DevToolsServerContext, DevToolsHttpServer } from \"../types\";\nimport { createServer as createHttpServer, request } from \"node:http\";\nimport { handleDevRequest } from \"./request-handler\";\nimport { DEV_TOOLS_SERVER_CLOSE_PATH } from \"../common/constants\";\n\nexport async function createDevToolsHttpServer(\n  ctx: DevToolsServerContext\n): Promise<DevToolsHttpServer> {\n  if (globalThis.__khulnasoftDevToolsServer) {\n    // reuse existing devtools server\n    ctx.debug(`reusing existing devtools server`);\n    globalThis.__khulnasoftDevToolsServer.setContext(ctx);\n    return globalThis.__khulnasoftDevToolsServer;\n  }\n\n  const port = await setupDevToolsPort(ctx);\n\n  const server = createHttpServer((request, response) => {\n    handleDevRequest(ctx, server, request, response);\n  });\n\n  const shutdownServer = () => {\n    return new Promise<void>((resolve, reject) => {\n      if (server.listening) {\n        ctx.debug(`closing devtools server on port ${port}`);\n        server.close((err) => {\n          ctx = null as any;\n          if (err) {\n            ctx.debug(`error closing devtools server on port ${port}`);\n            reject(err);\n          } else {\n            if (ctx) {\n              ctx.debug(`closed devtools server on port ${port}`);\n            }\n            resolve();\n          }\n        });\n      } else {\n        ctx.debug(`devtools server on port ${port} not listening`);\n        resolve();\n      }\n    });\n  };\n\n  process.once(\"SIGTERM\", shutdownServer);\n  process.once(\"SIGINT\", shutdownServer);\n  if (process.env.CI !== \"true\") {\n    process.stdin.on(\"end\", shutdownServer);\n  }\n\n  globalThis.__khulnasoftDevToolsServer = {\n    url: new URL(`http://localhost:${port}`).href,\n    port,\n    setContext: (newCtx) => {\n      ctx.debug(`set devtools context on server ${port}`);\n      ctx = newCtx;\n    },\n    close: async () => {\n      globalThis.__khulnasoftDevToolsServer = null;\n      await shutdownServer();\n    },\n  };\n\n  return new Promise((resolve) => {\n    server.listen(port, () => {\n      ctx.debug(`started devtools server on port ${port}`);\n      resolve(globalThis.__khulnasoftDevToolsServer!);\n    });\n  });\n}\n\nfunction setupDevToolsPort(ctx: DevToolsServerContext) {\n  return new Promise<number>((resolve) => {\n    const port = ctx.port;\n\n    try {\n      const options = {\n        hostname: \"localhost\",\n        port,\n        path: DEV_TOOLS_SERVER_CLOSE_PATH,\n        method: \"GET\",\n      };\n\n      request(options, (res) => {\n        res.on(\"end\", () => {\n          ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - Response ended`);\n          resolve(port);\n        });\n      })\n        .on(\"error\", (error) => {\n          ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - No response ${error}`);\n          resolve(port);\n        })\n        .end();\n    } catch (e) {\n      ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - Error ${e}`);\n      resolve(port);\n    }\n  });\n}\n\ndeclare const globalThis: {\n  __khulnasoftDevToolsServer?: DevToolsHttpServer | null;\n};\n", "import { debug } from \"node:console\";\nimport { request as httpRequest } from \"node:http\";\nimport { request as httpsRequest } from \"node:https\";\n\nexport function requestJSON<T>(opts: RequestOptions) {\n  const startTime = Date.now();\n\n  return new Promise<T>((resolve, reject) => {\n    const request = getRequestModule(opts.url);\n    const req = request(\n      {\n        protocol: opts.url.protocol,\n        host: opts.url.host,\n        port: opts.url.port,\n        path: opts.url.pathname + opts.url.search,\n        method: opts.method,\n        headers: opts.headers,\n      },\n      (res) => {\n        let data = \"\";\n        res.on(\"data\", (chunk) => {\n          data += chunk;\n        });\n\n        res.on(\"end\", () => {\n          debug(\n            `${opts.method} ${opts.url.href}, duration: ${\n              Date.now() - startTime\n            }ms`\n          );\n\n          if (\n            typeof res.statusCode === \"number\" &&\n            res.statusCode >= 200 &&\n            res.statusCode < 300\n          ) {\n            if (\n              typeof res.headers[\"content-type\"] !== \"string\" ||\n              !res.headers[\"content-type\"].includes(\"application/json\")\n            ) {\n              reject(\n                `Response from ${opts.url.href} content-type is ${res.headers[\"content-type\"]}`\n              );\n            } else {\n              try {\n                resolve(JSON.parse(data));\n              } catch (err) {\n                reject(\n                  `Response from ${opts.url.href} is not valid JSON: ${data}\\n${err}`\n                );\n              }\n            }\n          } else {\n            reject(\n              `Request to ${opts.url.href} failed with status ${res.statusCode}: ${data}`\n            );\n          }\n        });\n      }\n    ).on(\"error\", (e) => {\n      reject(`Error fetching ${opts.url.href}, ${e}`);\n    });\n\n    if (opts.body) {\n      req.setHeader(\"Content-Type\", \"application/json\");\n      req.write(opts.body);\n    }\n\n    req.end();\n  });\n}\n\nfunction getRequestModule(url: URL) {\n  if (url.protocol === \"https:\") {\n    return httpsRequest;\n  } else if (url.protocol === \"http:\") {\n    return httpRequest;\n  } else {\n    throw new Error(`Unsupported protocol ${url.protocol}`);\n  }\n}\n\nexport interface RequestOptions {\n  url: URL;\n  headers?: Record<string, string>;\n  method: string;\n  body?: any;\n}\n", "import {\n  type DevToolsSys,\n  type SPACE_KIND_VALUES,\n  SPACE_KIND,\n} from \"packages/dev-tools/types\";\nimport { requestJSON } from \"../node-request\";\n\nexport async function hasKhulnasoftContentViaQueryAPI(opts: {\n  publicApiKey: string;\n  privateAuthKey: string;\n  model: string;\n  pageUrl: string;\n}) {\n  const url = new URL(\n    `https://cdn.khulnasoft.com/api/v3/query/${opts.publicApiKey}/${opts.model}`\n  );\n  url.searchParams.set(`omit`, `meta.componentsUsed`);\n  url.searchParams.set(`apiKey`, opts.publicApiKey);\n  url.searchParams.set(`userAttributes.urlPath`, opts.pageUrl);\n  url.searchParams.set(`options.page.model`, `\"${opts.model}\"`);\n  // This is important, without which the CDN level caching kicks in and causes all\n  // kinds of pain and annoyance\n  url.searchParams.set(`cachebust`, `true`);\n\n  const data: any = await requestJSON({\n    url: url,\n    method: \"GET\",\n  });\n\n  return data[opts.model];\n}\n\nexport async function hasKhulnasoftContentUrl(\n  sys: DevToolsSys,\n  opts: {\n    publicApiKey: string;\n    privateAuthKey: string;\n    model: string;\n    pageUrl: string;\n    kind: SPACE_KIND_VALUES;\n  }\n) {\n  // For VCP, we don't want to create content page in khulnasoft\n  if (opts.kind === SPACE_KIND.VCP) {\n    return true;\n  }\n  // https://www.khulnasoft.com/c/docs/admin-graphql-api\n  const adminUrl = new URL(`https://cdn.khulnasoft.com/api/v2/admin`);\n\n  const body = {\n    query: `query {\n      models {\n        id\n        name\n      }\n    }`,\n  };\n\n  sys.debug(`Get model id for model name \"${opts.model}\"`);\n\n  const graphQLRsp: GraphQLResponse = await requestJSON({\n    url: adminUrl,\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${opts.privateAuthKey}`,\n      \"Content-Type\": \"application/json\",\n      Accept: \"application/json\",\n    },\n    body: JSON.stringify(body),\n  });\n\n  const model = graphQLRsp.data.models.find((m) => m.name === opts.model);\n  if (!model) {\n    sys.debug(`No model found for model name \"${opts.model}\"`);\n    return false;\n  }\n\n  sys.debug(`Data query, modelId: \"${model.id}\", urlPath: \"${opts.pageUrl}\"`);\n\n  const dUrl = new URL(`https://cdn.khulnasoft.com/api/v3/data`);\n  dUrl.searchParams.set(`limit`, `1`);\n  dUrl.searchParams.set(`cachebust`, `true`);\n  dUrl.searchParams.set(`collection`, `content`);\n  dUrl.searchParams.set(`query.published.$ne`, `archived`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].property`, `urlPath`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].operator`, `is`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].value`, opts.pageUrl);\n  dUrl.searchParams.set(`query.modelId`, model.id);\n  dUrl.searchParams.set(`apiKey`, opts.publicApiKey);\n\n  const data: DataResponse = await requestJSON({\n    url: dUrl,\n    method: \"GET\",\n  });\n\n  sys.debug(`Data results (${data.results.length}): ${dUrl.href}`);\n\n  return data.results.length > 0;\n}\n\nexport async function getKhulnasoftContent(\n  sys: DevToolsSys,\n  opts: {\n    publicApiKey: string;\n    model: string;\n    pageUrl?: string;\n    id?: string;\n  }\n) {\n  const url = new URL(`https://cdn.khulnasoft.com/api/v3/content/${opts.model}`);\n  url.searchParams.set(`apiKey`, opts.publicApiKey);\n  url.searchParams.set(`cachebust`, `true`);\n  url.searchParams.set(`cb`, Date.now().toString());\n\n  if (opts.pageUrl) {\n    url.searchParams.set(`url`, opts.pageUrl);\n    sys.debug(\n      `get model: \"${opts.model}\", pageUrl: \"${opts.pageUrl}\":`,\n      url.href\n    );\n  }\n  if (opts.id) {\n    url.searchParams.set(`query.id`, opts.id);\n    sys.debug(`get model: \"${opts.model}\", id: \"${opts.id}\":`, url.href);\n  }\n\n  const data: { results: any[] } = await requestJSON({\n    url,\n    method: \"GET\",\n  });\n  sys.debug(`get content results: ${data.results.length}`);\n  return data;\n}\n\nexport async function writeKhulnasoftContent(\n  sys: DevToolsSys,\n  opts: {\n    privateAuthKey: string;\n    body: string;\n    model: string;\n  }\n) {\n  const url = new URL(`https://cdn.khulnasoft.com/api/v1/write/${opts.model}`);\n\n  sys.debug(`writing \"${opts.model}\" content:`, url.href);\n\n  await requestJSON({\n    url,\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${opts.privateAuthKey}`,\n    },\n    body: opts.body,\n  });\n}\n\ninterface GraphQLResponse {\n  data: {\n    models: { id: string; name: string }[];\n  };\n}\n\ninterface DataResponse {\n  results: any[];\n}\n", "// Khulnasoft Devtools Templates\n// https://khulnasoft.com/content?model=f93a6a6f6b3942f6a06bb82537d87306\n\nexport const DEFAULT_MODEL_NAME = \"page\";\nexport const TEMPLATE_MODEL_NAME = \"integration-welcome-screens\";\nexport const TEMPLATE_PUBLIC_API_KEY = \"8d9ee72a33344b4b867918b442ebd0af\";\n", "import type { DevToolsSys } from \"packages/dev-tools/types\";\nimport { getKhulnasoftContent, writeKhulnasoftContent } from \"./khulnasoft-api\";\nimport {\n  DEFAULT_MODEL_NAME,\n  TEMPLATE_MODEL_NAME,\n  TEMPLATE_PUBLIC_API_KEY,\n} from \"./content-ids\";\n\nexport async function createKhulnasoftPage(\n  sys: DevToolsSys,\n  opts: {\n    templateContentId: string;\n    publicApiKey: string;\n    privateAuthKey: string;\n    pathname: string;\n    title: string;\n  }\n) {\n  const data = await getKhulnasoftContent(sys, {\n    model: TEMPLATE_MODEL_NAME,\n    publicApiKey: TEMPLATE_PUBLIC_API_KEY,\n    id: opts.templateContentId,\n  });\n\n  if (\n    !Array.isArray(data?.results) ||\n    data.results.length === 0 ||\n    !data.results[0].data?.blocks\n  ) {\n    throw new Error(\n      `No Khulnasoft content found for id ${opts.templateContentId}`\n    );\n  }\n\n  const blocksString = JSON.stringify(data.results[0].data.blocks);\n\n  const writeContentData = createContentData(\n    opts.publicApiKey,\n    opts.pathname,\n    opts.title,\n    blocksString\n  );\n\n  await writeKhulnasoftContent(sys, {\n    privateAuthKey: opts.privateAuthKey,\n    model: DEFAULT_MODEL_NAME,\n    body: writeContentData,\n  });\n}\n\nfunction createContentData(\n  apiKey: string,\n  pathname: string,\n  title: string,\n  blocksString: string\n) {\n  return JSON.stringify({\n    name: title,\n    ownerId: apiKey,\n    published: \"published\",\n    query: [\n      {\n        property: \"urlPath\",\n        value: [pathname],\n        operator: \"is\",\n      },\n    ],\n    data: {\n      title: title,\n      blocksString,\n    },\n  });\n}\n", "import {\n  type DevToolsServerContext,\n  type ConnectedKhulnasoft,\n  type ValidatedKhulnasoft,\n  type SPACE_KIND_VALUES,\n  type ModifiedFile,\n  SPACE_KIND,\n} from \"../types\";\nimport { createKhulnasoftPage } from \"../common/khulnasoft/content-generation\";\nimport {\n  // getKhulnasoftContent,\n  hasKhulnasoftContentUrl,\n  hasKhulnasoftContentViaQueryAPI,\n} from \"../common/khulnasoft/khulnasoft-api\";\nimport { DEFAULT_MODEL_NAME } from \"../common/khulnasoft/content-ids\";\n\nexport async function connectKhulnasoft(\n  ctx: DevToolsServerContext,\n  publicApiKey: string,\n  privateAuthKey: string,\n  kind: SPACE_KIND_VALUES\n) {\n  ctx.debug(`connect khulnasoft with public key: ${publicApiKey}`);\n\n  ctx.publicApiKey = publicApiKey;\n\n  // ctx.kind = kind as SPACE_KIND_VALUES | null;\n\n  const closeServerPromise = ctx.closeAppServer();\n\n  const apiKey = await ctx.setPublicApiKey({ publicApiKey });\n\n  ctx.debug(`set public key: process.env.${apiKey.envKey}=${publicApiKey}`);\n  process.env[apiKey.envKey] = publicApiKey;\n\n  const frameworkPageOpts = await ctx.khulnasoftPageOptions();\n\n  ctx.debug(\n    `khulnasoft model: ${DEFAULT_MODEL_NAME}, path: ${frameworkPageOpts.pathname}, template: ${frameworkPageOpts.templateContentId}`\n  );\n\n  let hasContent = await hasKhulnasoftContentUrl(ctx, {\n    model: DEFAULT_MODEL_NAME,\n    pageUrl: frameworkPageOpts.pathname,\n    publicApiKey,\n    privateAuthKey,\n    kind\n  });\n\n  if (!hasContent) {\n    await createKhulnasoftPage(ctx, {\n      templateContentId: frameworkPageOpts.templateContentId,\n      pathname: frameworkPageOpts.pathname,\n      title: frameworkPageOpts.title,\n      publicApiKey,\n      privateAuthKey,\n    });\n\n    // If we just created content, wait a few seconds for it to be available\n    // Also, hit the same URL that the Khulnasoft SDK calls, but with cachebust\n    // to avoid any CDN level caching issues. Once that is available, it should\n    // generally be safe to proceed. This solves most of the 404 issues on initial\n    // launch\n    let MAX_RETRIES = 5;\n    let retries = 0;\n    while (!hasContent && retries < MAX_RETRIES) {\n      await new Promise((resolve) => setTimeout(resolve, 1000));\n      let content = await hasKhulnasoftContentViaQueryAPI({\n        model: DEFAULT_MODEL_NAME,\n        pageUrl: frameworkPageOpts.pathname,\n        publicApiKey,\n        privateAuthKey,\n      });\n      retries++;\n      if (content && content.length > 0) {\n        hasContent = true;\n      }\n    }\n  }\n\n  await closeServerPromise;\n\n  ctx.debug(`ensure khulnasoft setup`);\n  \n  let modifiedFiles: ModifiedFile[] = [];\n\n  // For VCP, we need to ensure figma import page is setup\n  if (kind === SPACE_KIND.VCP) {\n    modifiedFiles = await ctx.ensureFigmaImportPage();\n  } else {\n    modifiedFiles = await ctx.ensureKhulnasoftSetup();\n  }\n\n  if (apiKey.modifiedType) {\n    modifiedFiles.push({\n      filePath: apiKey.file,\n      modifiedType: apiKey.modifiedType,\n    });\n  }\n\n  modifiedFiles.forEach((m) => {\n    m.displayFilePath = ctx.relative(ctx.getAppRootDir(), m.filePath);\n  });\n  modifiedFiles.sort((a, b) => a.filePath.localeCompare(b.filePath));\n\n  if (modifiedFiles.length > 0) {\n    ctx.debug(\n      `modified files: ${modifiedFiles\n        .map((m) => m.displayFilePath)\n        .join(\", \")}`\n    );\n    await ctx.restartAppServer();\n    await new Promise((resolve) => setTimeout(resolve, 500));\n  } else {\n    ctx.debug(`no modified files`);\n  }\n\n  const connectedKhulnasoft: ConnectedKhulnasoft = {\n    success: true,\n    pathname: frameworkPageOpts.localePathname || frameworkPageOpts.pathname,\n    modifiedFiles,\n    platform: ctx.platform(),\n    kind\n  };\n\n  if(kind === SPACE_KIND.VCP) {\n    connectedKhulnasoft.pathname = '/'\n  }\n\n  ctx.debug(`connected khulnasoft: ${connectedKhulnasoft.pathname}`);\n\n  return connectedKhulnasoft;\n}\n\nexport async function validateKhulnasoft(ctx: DevToolsServerContext) {\n  const frameworkPageOpts = await ctx.khulnasoftPageOptions();\n\n  ctx.debug(\n    `validateKhulnasoft, pathname: ${frameworkPageOpts.pathname}, localePathname: ${frameworkPageOpts.localePathname}, isValid: ${ctx.isValid}`\n  );\n\n  const result: ValidatedKhulnasoft = {\n    isValid: ctx.isValid,\n    pathname: frameworkPageOpts.localePathname || frameworkPageOpts.pathname,\n    platform: ctx.platform(),\n  };\n\n  if (ctx.isValid) {\n    return result;\n  }\n\n  // get the khulnasoft public api key from the .env file\n  const envInfo = await ctx.getPublicApiKey();\n  if (!envInfo.envValue) {\n    ctx.debug(`missing public api key`);\n    return result;\n  }\n\n  ctx.debug(`public api key: ${envInfo.envValue}, ${envInfo.file}`);\n\n  // remember the valid app credentials\n  ctx.publicApiKey = envInfo.envValue;\n\n  // For now, skipping validation of homepage content as it is not needed for the VCP.\n\n  // it's possible that the khulnasoft auth is setup, but they still don't have a homepage somehow\n  // double check if this khulnasoft account already has a homepage created\n  // const b = await getKhulnasoftContent(ctx, {\n  //   model: DEFAULT_MODEL_NAME,\n  //   publicApiKey: envInfo.envValue,\n  // });\n  // if (b.results.length === 0) {\n  //   ctx.debug(`missing homepage content`);\n  //   // there is no homepage content created yet for the valid public api key\n  //   // we don't have their private key, so let's redirect to the auth flow\n  //   // so we can get their private key and create the homepage for them\n  //   return result;\n  // }\n\n  // awesome, we're all set\n  // the public key is saved correctly in the .env file\n  // and they have a homepage created\n\n  // set isValid to true so we don't have to validate again\n  ctx.debug(`khulnasoft connection is valid`);\n  result.isValid = true;\n  ctx.isValid = true;\n\n  return result;\n}\n", "import { transpileFile, transpileModule } from \"../common/typescript\";\nimport { readConfigFile } from \"../node/node-sys\";\nimport type { ApiResponse, ApiRequest, DevToolsServerContext, SPACE_KIND_VALUES, DevToolsSys } from \"../types\";\nimport { connectKhulnasoft, validateKhulnasoft } from \"./khulnasoft-connect\";\n\nexport async function handleDevApiRequest(\n  ctx: DevToolsServerContext,\n  apiReq: ApiRequest\n): Promise<ApiResponse> {\n  const result: ApiResponse = {\n    type: apiReq.type,\n  };\n\n  switch (apiReq.type) {\n    case \"getCache\": {\n      result.data = await ctx.getCache();\n      break;\n    }\n    case \"setCache\": {\n      await ctx.setCache(apiReq.data);\n      break;\n    }\n    case \"connectKhulnasoft\": {\n      result.data = await connectKhulnasoft(\n        ctx,\n        apiReq.data.publicApiKey,\n        apiReq.data.privateAuthKey,\n        apiReq.data.kind as SPACE_KIND_VALUES\n      );\n      break;\n    }\n    case \"enableDevTools\": {\n      result.data = enableDevTools(ctx, apiReq.data.enabled);\n      break;\n    }\n    case \"getRegistry\": {\n      result.data = await ctx.getRegistry(apiReq.data);\n      break;\n    }\n    case \"launchEditor\": {\n      result.data = await ctx.launchEditor(apiReq.data);\n      break;\n    }\n    case \"validateKhulnasoft\": {\n      result.data = await validateKhulnasoft(ctx);\n      break;\n    }\n    case \"loadComponent\": {\n      result.data = await ctx.loadComponent(apiReq.data);\n      break;\n    }\n    case \"registerComponent\": {\n      result.data = await ctx.registerComponent(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"setComponentInfo\": {\n      result.data = await ctx.setRegisteredComponentInfo(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"setComponentInput\": {\n      result.data = await ctx.setRegisteredComponentInput(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"unregisterComponent\": {\n      result.data = await ctx.unregisterComponent(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"getFrameworks\": {\n      result.data = ctx.getFrameworks();\n      break;\n    }\n    case \"readdir\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        result.data = await ctx.readdir(apiReq.path, true);\n      }\n\n      break;\n    }\n    case \"readFile\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        result.data = await ctx.readFile(apiReq.path);\n      }\n      break;\n    }\n    case \"writeFile\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        await ctx.writeFile(apiReq.path, apiReq.content);\n      }\n      break;\n    }\n    case \"ensureFigmaImportPage\": {\n      result.data = await ctx.ensureFigmaImportPage();\n      break;\n    }\n    case \"transileFile\": {\n      result.data = await transpileFile(ctx, apiReq);\n      break;\n    }\n    case \"transileModule\": {\n      result.data = transpileModule(ctx, apiReq);\n      break;\n    }\n    case \"getPastSyncInfo\": {\n      result.data = await ctx.getPastSyncInfo?.(apiReq.data);\n      break;\n    }\n    case \"resyncSnippet\": {\n      result.data = await ctx.resyncSnippet?.(apiReq.data);\n      break;\n    }\n    case \"localConfig\": {\n      result.data = await readConfigFile();\n      break;\n    }\n    default: {\n      result.errors = [`Unknown request type: ${JSON.stringify(apiReq)}`];\n\n      // exhaustiveness check\n      // this will cause a compile error if we forget to handle a request type\n      const _exhaustiveCheck: never = apiReq;\n      _exhaustiveCheck;\n    }\n  }\n\n  return result;\n}\n\nfunction isValidFileRequest(sys: DevToolsSys,path: string) {\n  if (!path) {\n    return false;\n  }\n\n  if (path.includes(\"..\")) {\n    return false;\n  }\n\n  path = path.replace(/\\\\/g, \"/\");\n\n  const parts = path.split(\"/\");\n  const last = parts[parts.length - 1];\n  if (last.length > 0) {\n    let ext = last.split(\".\").pop();\n    if (ext) {\n      ext = `.${ext}`.toLocaleLowerCase();\n      ext = ext.split(\"?\")[0];\n      if (!EXT_WHITELIST.includes(ext)) {\n        return false;\n      }\n    }\n  }\n  if (!validatePath(sys, path)) {\n    return false;\n  }\n  return false;\n}\n\nfunction validatePath(sys: DevToolsSys, userPath: string) {\n  if (!userPath) {\n    return false;\n  }\n\n  // Normalize and resolve the paths to ensure they are absolute and clean\n  userPath = sys.normalize(sys.resolve(userPath));\n\n  const rootDir = sys.getAppRootDir();\n\n  if (!userPath.startsWith(rootDir) && !userPath.includes(\"node_modules\")) {\n    return false;\n  }\n  return true;\n}\n\n\nconst EXT_WHITELIST = [\n  \".js\",\n  \".jsx\",\n  \".ts\",\n  \".tsx\",\n  \".json\",\n  \".css\",\n  \".scss\",\n  \".sass\",\n  \".less\",\n  \".html\",\n  \".htm\",\n  \".xml\",\n  \".svg\",\n  \".png\",\n  \".jpg\",\n  \".jpeg\",\n  \".gif\",\n  \".ico\",\n  \".webp\",\n  \".woff\",\n  \".woff2\",\n  \".ttf\",\n  \".eot\",\n  \".mp4\",\n  \".webm\",\n  \".ogg\",\n  \".md\",\n  \".txt\",\n  \".csv\",\n  \".pdf\",\n];\n\nfunction enableDevTools(\n  ctx: DevToolsServerContext,\n  isDevToolsEnabled: boolean\n) {\n  if (!isDevToolsEnabled && ctx.serverShouldRestart) {\n    // devtools no longer showing\n    // and they've made file changes while it was opened\n    // so we should restart the server now\n    setTimeout(() => {\n      console.log(`\\nRestarting server after Khulnasoft Devtools update...\\n`);\n      ctx.restartAppServer();\n    }, 10);\n  }\n\n  ctx.enableAppWatch(!isDevToolsEnabled);\n\n  return {\n    enabled: isDevToolsEnabled,\n    platform: ctx.platform(),\n  };\n}\n", "import type { DevToolsServerContext } from \"../types\";\nimport { getLocalAppId } from \"../common/utils\";\n\nexport async function getClientScript(ctx: DevToolsServerContext) {\n  return updateClientRuntimeVariables(ctx, CLIENT_SCRIPT);\n}\n\nexport async function getConnectedStepHtml(ctx: DevToolsServerContext) {\n  return updateClientRuntimeVariables(ctx, CONNECTED_STEP_HTML);\n}\n\nasync function updateClientRuntimeVariables(\n  ctx: DevToolsServerContext,\n  code: string\n) {\n  const localAppId = await getLocalAppId(ctx);\n  const frameworks = ctx.getFrameworks();\n  return code\n    .replace(/__LOCAL_APP_ID__/g, localAppId)\n    .replace(/__DEV_TOOLS_URL__/g, ctx.devToolsServerUrl)\n    .replace(/__CLIENT_ID__/g, ctx.getClientId())\n    .replace(/__FRAMEWORK__/g, frameworks.length ? frameworks[0].name : \"\");\n}\n\ndeclare const CLIENT_SCRIPT: string;\n\ndeclare const CONNECTED_STEP_HTML: string;\n", "import type { DevToolsServerContext } from \"../types\";\nimport {\n  KHULNASOFT_AUTH_RETURN_PATH,\n  FRAMEWORK_QS,\n  PLATFORM_QS,\n  NODE_VERSION_QS,\n} from \"../common/constants\";\nimport { platform } from \"node:os\";\n\nexport async function getKhulnasoftAuthConnectUrl(\n  ctx: DevToolsServerContext,\n  previewUrl: string\n) {\n  const authUrl = new URL(`/cli-auth`, `https://khulnasoft.com`);\n  authUrl.searchParams.set(`client_id`, ctx.getClientId());\n\n  authUrl.searchParams.set(`host`, await ctx.getDeviceId());\n  authUrl.searchParams.set(`response_type`, `code`);\n  authUrl.searchParams.set(`cli`, `true`);\n\n  const returnUrl = new URL(KHULNASOFT_AUTH_RETURN_PATH, ctx.devToolsServerUrl);\n  returnUrl.searchParams.set(PLATFORM_QS, platform());\n  returnUrl.searchParams.set(NODE_VERSION_QS, process.versions.node);\n\n  const frameworks = ctx.getFrameworks();\n  if (frameworks.length > 0) {\n    authUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n    returnUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n  }\n\n  authUrl.searchParams.set(`redirect_url`, returnUrl.href);\n  authUrl.searchParams.set(`preview_url`, previewUrl);\n\n  return authUrl.href;\n}\n", "import type { ApiResponse, DevToolsServerContext } from \"../types\";\nimport type {\n  IncomingMessage,\n  OutgoingHttpHeaders,\n  Server,\n  ServerResponse,\n} from \"http\";\nimport {\n  PREVIEW_URL_QS,\n  KHULNASOFT_AUTH_CONNECT_PATH,\n  KHULNASOFT_AUTH_RETURN_PATH,\n  DEV_TOOLS_API_PATH,\n  DEV_TOOLS_CLIENT_SCRIPT_PATH,\n  DEV_TOOLS_SERVER_CLOSE_PATH,\n} from \"../common/constants\";\nimport { handleDevApiRequest } from \"./dev-tools-api\";\nimport { getClientScript, getConnectedStepHtml } from \"./client-script\";\nimport { getKhulnasoftAuthConnectUrl } from \"./auth\";\n\nexport async function handleDevRequest(\n  ctx: DevToolsServerContext | null,\n  server: Server,\n  req: IncomingMessage,\n  res: ServerResponse\n) {\n  try {\n    if (!ctx) {\n      return text(req, res, 400, `Khulnasoft context closed`);\n    }\n\n    const url = getNodeHttpUrl(req);\n\n    if (url.pathname === DEV_TOOLS_API_PATH) {\n      if (req.method === \"POST\") {\n        const body = await getRequestBody(req);\n        if (body) {\n          try {\n            const apiResult = await handleDevApiRequest(ctx, JSON.parse(body));\n            return json(req, res, 200, apiResult);\n          } catch (e: any) {\n            ctx.debug(`Dev API Error`, e.stack || e.message || e);\n            const errorResponse: ApiResponse = {\n              errors: [String(e.message || e)],\n            };\n            return json(req, res, 500, errorResponse);\n          }\n        }\n      } else if (req.method === \"OPTIONS\") {\n        const headers: OutgoingHttpHeaders = {\n          \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n          \"Access-Control-Allow-Headers\":\n            \"Content-Type, Cache-Control, X-Khulnasoft-Devtools-Version\",\n        };\n\n        const reqOrigin = req.headers.origin;\n        if (reqOrigin && reqOrigin !== \"null\") {\n          if (isValidRequestOrigin(new URL(reqOrigin))) {\n            headers[\"Access-Control-Allow-Origin\"] = reqOrigin;\n          }\n        } else {\n          headers[\"Access-Control-Allow-Origin\"] = \"*\";\n        }\n\n        // console.log(\"OPTIONS response\", headers);\n        res.writeHead(200, headers);\n        res.end();\n        return;\n      }\n\n      return text(\n        req,\n        res,\n        405,\n        `${DEV_TOOLS_API_PATH} is an API endpoint used only during development by the Khulnasoft.com Devtools client-side script`\n      );\n    }\n\n    if (url.pathname === DEV_TOOLS_CLIENT_SCRIPT_PATH) {\n      return javascript(req, res, 200, await getClientScript(ctx));\n    }\n\n    if (url.pathname === KHULNASOFT_AUTH_CONNECT_PATH) {\n      const previewUrl = url.searchParams.get(PREVIEW_URL_QS);\n      if (!previewUrl) {\n        return text(req, res, 400, `Missing ${PREVIEW_URL_QS} querystring`);\n      }\n      return redirect(\n        res,\n        302,\n        await getKhulnasoftAuthConnectUrl(ctx, previewUrl)\n      );\n    }\n\n    if (url.pathname === KHULNASOFT_AUTH_RETURN_PATH) {\n      return html(req, res, 200, await getConnectedStepHtml(ctx));\n    }\n\n    if (url.pathname === DEV_TOOLS_SERVER_CLOSE_PATH) {\n      ctx.debug(`Close Dev Tools Server Requested: ${url.href}`);\n      setTimeout(() => {\n        try {\n          server.close((err) => {\n            ctx.debug(`Dev Tools Server Closed Error: ${err}`);\n          });\n        } catch (e) {\n          ctx.debug(`Error closing devtools server: ${e}`);\n        }\n      }, 20);\n      return text(req, res, 200, `Closing Dev Tools Server`);\n    }\n\n    return text(req, res, 404, `Not found`);\n  } catch (e: any) {\n    console.error(`Dev Server Error`, e);\n    return text(req, res, 500, `Dev Server Error: ${e}`);\n  }\n}\n\nfunction json(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  apiRsp: ApiResponse\n) {\n  response(req, res, status, \"application/json\", JSON.stringify(apiRsp));\n}\n\nfunction javascript(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string\n) {\n  response(req, res, status, \"application/javascript\", body);\n}\n\nfunction html(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string\n) {\n  response(req, res, status, \"text/html\", body);\n}\n\nfunction text(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string\n) {\n  response(req, res, status, \"text/plain\", body);\n}\n\nfunction response(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  contentType:\n    | \"text/plain\"\n    | \"text/html\"\n    | \"application/javascript\"\n    | \"application/json\",\n  body: string\n) {\n  const headers: OutgoingHttpHeaders = {\n    \"Content-Type\": `${contentType}; charset=utf-8`,\n    \"Cache-Control\": \"no-cache, no-store, must-revalidate\",\n    \"X-Khulnasoft-Devtools-Version\": DEV_TOOLS_VERSION,\n  };\n\n  const reqOrigin = req.headers.origin;\n  if (reqOrigin && reqOrigin !== \"null\") {\n    if (isValidRequestOrigin(new URL(reqOrigin))) {\n      headers[\"Access-Control-Allow-Origin\"] = reqOrigin;\n    }\n  } else {\n    headers[\"Access-Control-Allow-Origin\"] = \"*\";\n  }\n\n  res.writeHead(status, headers);\n  res.end(body);\n}\n\nfunction isValidRequestOrigin(o: URL) {\n  if (o.hostname === \"localhost\") {\n    return true;\n  }\n  if (\n    o.origin === \"https://khulnasoft.com\" ||\n    o.origin === \"https://www.khulnasoft.com\" ||\n    o.origin.endsWith(\".khulnasoft.com\")\n  ) {\n    return true;\n  }\n  if (o.port === \"\") {\n    return false;\n  }\n  if (o.port !== \"80\" && o.port !== \"443\") {\n    return true;\n  }\n  return false;\n}\n\nfunction redirect(\n  response: ServerResponse,\n  status: number,\n  redirectTo: string\n) {\n  response.writeHead(status, {\n    Location: redirectTo,\n  });\n  response.end();\n}\n\nasync function getRequestBody(request: IncomingMessage) {\n  let body = \"\";\n  for await (const chunk of request as any) {\n    body += chunk;\n  }\n  return body;\n}\n\nfunction getNodeHttpUrl(req: IncomingMessage) {\n  const path = req.url || \"/\";\n  return new URL(path, `http://${req.headers.host}`);\n}\n\ndeclare const DEV_TOOLS_VERSION: string;\n", "import type {\n  DevToolsServer,\n  DevToolsServerContext,\n  DevToolsServerOptions,\n} from \"../types\";\nimport { createDevToolsHttpServer } from \"./dev-tools-http-server\";\nimport { version } from \"./index\";\n\nexport async function createDevToolsServer(opts: DevToolsServerOptions) {\n  const ctx: DevToolsServerContext = {\n    getPastSyncInfo: () => null,\n    resyncSnippet: () => null,\n    ...opts,\n    devToolsServerUrl: \"\",\n    isValid: false,\n    publicApiKey: \"\",\n    serverShouldRestart: false,\n    port: opts.port || 5273,\n    ignoreMissingConfig: false,\n  };\n\n  const frameworks = opts\n    .getFrameworks()\n    .map((f) => f.name)\n    .join(\", \");\n\n  ctx.debug(`create devtools ${version} [${frameworks}]`);\n\n  const httpServer = await createDevToolsHttpServer(ctx);\n\n  ctx.devToolsServerUrl = httpServer.url;\n  ctx.port = httpServer.port;\n\n  const devToolsServer: DevToolsServer = {\n    getUrl: () => ctx.devToolsServerUrl,\n  };\n\n  return devToolsServer;\n}\n", "export type {\n  ApiRequest,\n  ApiResponse,\n  ApiConnectKhulnasoftRequest,\n  ApiDevToolsEnabledRequest,\n  ApiLocalConfigRequest,\n  ApiGetRegistryRequest,\n  ApiLaunchEditorRequest,\n  ApiRegisterComponentRequest,\n  ApiRegisteredComponentInfoRequest,\n  ApiRegisteredComponentInputRequest,\n  ApiLoadComponentRequest,\n  ApiUnregisterComponentRequest,\n  ApiValidateKhulnasoftRequest,\n  ApiFrameworksRequest,\n  ApiReadFileRequest,\n  ApiWriteFileRequest,\n  ApiReaddirRequest,\n  ComponentRegistry,\n  DevToolsServer,\n  DevToolsServerOptions,\n  Framework,\n  GetRegistryOptions,\n  TranspileDiagnostic,\n  TranspileFileOptions,\n  TranspileModuleOptions,\n  TranspileResult,\n} from \"../types\";\n\nexport { createDevToolsServer } from \"./create-dev-tools-server\";\n\nexport const version = DEV_TOOLS_VERSION;\n\ndeclare const DEV_TOOLS_VERSION: string;\n", "import type { DevToolsSys, RepoInfo } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport {\n  bold,\n  bgCyan,\n  dim,\n  magenta,\n  white,\n  bgGreen,\n  bgBlack,\n  green,\n} from \"picocolors\";\nimport { getAllProjectFiles } from \"./sync-utils\";\nimport { ChildProcess, spawn, type SpawnOptions } from \"node:child_process\";\nimport { createEmphasize, common } from \"emphasize\";\n\nimport {\n  isCancel,\n  intro,\n  log,\n  confirm,\n  cancel,\n  text,\n  outro,\n  select,\n} from \"@clack/prompts\";\nimport { spinner } from \"./spinner\";\nimport { getCredentials, type Credentials } from \"./credentials\";\nimport { track } from \"./track\";\nimport { apiAirV2Host } from \"./constants\";\nimport { safeFetch } from \"./fetch\";\nimport { codeIndexing, runCodeIndexing } from \"./indexing\";\nimport { prettierFormat } from \"./prettier\";\nimport { printHelp } from \"./help\";\n\ninterface UndoState {\n  files: { path: string; content: string | null }[];\n}\n\ntype Importance = 3 | 2 | 1;\n\ninterface ProjectFile {\n  filePath: string;\n  content: string;\n  importance: Importance;\n}\n\ninterface CodeGenCompletionBody {\n  url?: string;\n  files: ProjectFile[];\n  hiddenFiles: string[];\n  customInstructions: CustomInstruction[];\n  history: { role: \"user\" | \"assistant\"; content: string }[];\n  mode: \"exact\" | \"creative\";\n  userPrompt: string;\n  reranker: number | undefined;\n  prevId: string | undefined;\n}\n\ninterface CodeGenSearchBody {\n  repoInfo: RepoInfo;\n  query: string;\n  limit: number;\n}\n\ninterface RankedResult {\n  filePath: string;\n  startIndex: number;\n  endIndex: number;\n  score: number;\n  id: string;\n}\n\nexport interface CustomInstruction {\n  id: string;\n  name: string;\n  content: string;\n}\n\ninterface SessionContext {\n  history: { role: \"user\" | \"assistant\"; content: string; id?: string }[];\n  undoStates: UndoState[];\n  selectedFilePaths: Map<string, Importance>;\n}\n\nexport interface ArtifactItem {\n  type: \"shell\" | \"file\" | \"text\" | \"delta\" | \"done\" | \"diff\";\n  id?: string;\n  content: string;\n  filePath?: string;\n  artifactTitle?: string;\n  actionTitle?: string;\n  synthetic?: boolean;\n  incomplete?: boolean;\n}\n\nexport const runCodeCommand = async (\n  sys: DevToolsSys,\n  subCommand: string,\n  args: CLIArgs\n) => {\n  if (subCommand === \"indexing\") {\n    await runCodeIndexing(sys, args);\n  } else if (\n    subCommand === \"generate\" ||\n    subCommand === \"gen\" ||\n    subCommand === \"g\"\n  ) {\n    await runCodeGen(sys, args);\n  } else if (subCommand === \"gen\") {\n    printHelp(\"code\");\n  } else {\n    await runCodeGen(sys, args);\n  }\n};\n\nexport const runCodeGen = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" code \"))) + `  ` + dim(VERSION));\n\n  const credentials = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    khulnasoftPrivateKey: true,\n    khulnasoftPublicKey: true,\n  });\n\n  const url = args.url;\n\n  const ctx: SessionContext = {\n    history: [],\n    undoStates: [],\n    selectedFilePaths: new Map(),\n  };\n  track(\"figma code started\", {\n    spaceId: credentials.khulnasoftPublicKey,\n  });\n\n  // New: Handle non-interactive mode\n  if (args.prompt) {\n    const mode = args.mode || \"exact\";\n    const answer = { userPrompt: args.prompt, mode };\n    await generateCompletion(\n      sys,\n      credentials,\n      ctx,\n      answer.userPrompt,\n      answer.mode,\n      url\n    );\n    return;\n  }\n\n  // Existing interactive mode\n  while (true) {\n    const answer = await askInteractiveQuestions(sys, credentials, ctx, !!url);\n    if (answer === \"exit\") {\n      break;\n    }\n    if (answer === \"undo\") {\n      continue;\n    }\n    const userPrompt = answer.userPrompt;\n    const mode = answer.mode;\n\n    await generateCompletion(sys, credentials, ctx, userPrompt, mode, url);\n  }\n};\n\nasync function askInteractiveQuestions(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionContext: SessionContext,\n  hasDesign: boolean\n) {\n  const appRootDir = sys.getAppRootDir();\n  let userPrompt = \"\";\n  let mode: \"exact\" | \"creative\" | undefined;\n  if (sessionContext.history.length === 0) {\n    const placeholder = hasDesign\n      ? `some examples: \"add a header to the layout of the app\", \"add a new contact page\", \"update the card component\"`\n      : `some examples: \"add a new page\", \"add a new component\", \"update the button component\"`;\n\n    const message = hasDesign\n      ? \"How does the design integrate into the project? (be detailed)\"\n      : \"What do you want to do?\";\n\n    const integration = await text({\n      message,\n      placeholder: placeholder,\n      validate(value) {\n        if (hasDesign) {\n          if (value.length === 0) {\n            return \"please, enter a detailed instruction\";\n          }\n          if (value.length < 10) {\n            return \"a more detailed instruction is needed\";\n          }\n        } else if (value.length === 0) {\n          return \"please, provide some prompt\";\n        }\n      },\n    });\n    if (isCancel(integration)) {\n      cancel(\"See you later! \uD83D\uDC4B\");\n      return \"exit\";\n    }\n    userPrompt =\n      integration ??\n      \"integrate design into the app, might be a new page/component/layout depending on the design\";\n\n    if (hasDesign) {\n      const integrationMode =\n        mode ??\n        (await select({\n          message: \"How do you want to apply the changes?\",\n          options: [\n            {\n              value: \"exact\",\n              label: \"Precise\",\n              hint: \"imports exactly as designed, might include artifacts\",\n            } as const,\n            {\n              value: \"creative\",\n              label: \"Match-my-style\",\n              hint: \"design might be slighly changed to match the codebase, but looks better\",\n            } as const,\n          ],\n        }));\n      if (isCancel(integrationMode)) {\n        cancel(\"Command cancelled\");\n        return \"exit\";\n      }\n      mode = integrationMode;\n    } else {\n      mode = \"creative\";\n    }\n  } else {\n    const lastCompletionId =\n      sessionContext.history[sessionContext.history.length - 1]?.id;\n    log.message(\n      `${green(\"Changes are applied.\")} What do you want to do next?\\n\n${bgBlack(\" Ctrl+C \")} ${dim(\"to accept changes and exit\")}\n${bgBlack(` \"undo\" `)} ${dim(\"to undo last changes and try again\")}`,\n      { symbol: green(\"\u2714\") }\n    );\n\n    const integration = await text({\n      message: `${bgBlack(\" Follow up \")} with more instructions:`,\n      placeholder: ` Reply \"accept\", \"undo\", or provide follow-up feedback (Ctrl+C to exit)`,\n      validate(value) {\n        if (!value) {\n          return \"Please enter a value (Ctrl+C & exit)\";\n        }\n      },\n    });\n\n    const isAccepted =\n      isCancel(integration) || integration.trim().toLowerCase() === \"accept\";\n    if (isAccepted) {\n      outro(\n        `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))}  ${dim(\n          \"session \" + lastCompletionId\n        )}`\n      );\n\n      track(\"figma code accepted\", {\n        spaceId: credentials.khulnasoftPublicKey,\n        userPrompt: userPrompt,\n      });\n      if (lastCompletionId) {\n        await completionFeedback(credentials, lastCompletionId, \"negative\");\n      }\n      return \"exit\";\n    }\n    if (integration.trim().toLowerCase() === \"undo\") {\n      if (lastCompletionId) {\n        await completionFeedback(credentials, lastCompletionId, \"negative\");\n      }\n      sessionContext.history.pop(); // pop last assistant message\n      sessionContext.history.pop(); // pop last user message\n      const undoState = sessionContext.undoStates.pop();\n      if (undoState) {\n        for (const file of undoState.files) {\n          if (file.content) {\n            await sys.writeFile(sys.join(appRootDir, file.path), file.content);\n          } else {\n            await sys.unlink(sys.join(appRootDir, file.path));\n          }\n        }\n        log.warn(\n          `Restored files to previous state:\\n${undoState.files\n            .map((file) => dim(\" - \" + file.path))\n            .join(\"\\n\")}\\n`\n        );\n      }\n      return \"undo\";\n    }\n    userPrompt = integration;\n  }\n  return { userPrompt, mode };\n}\n\nconst SUGGEST_INDEXING = false;\n\nasync function generateCompletion(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionContext: SessionContext,\n  userPrompt: string,\n  mode: \"exact\" | \"creative\" | undefined,\n  url: string | undefined\n) {\n  const highlight = createEmphasize(common);\n  const appRootDir = sys.getAppRootDir();\n  const repoInfo = await sys.getRepoInfo();\n\n  let s: ReturnType<typeof spinner> | undefined = spinner();\n  s.start(`Analyzing relevant files`);\n\n  let files: string[] = [];\n  let hiddenFiles: string[] = [];\n  let currentChunks = false;\n  let responded = false;\n\n  let reranker: number | undefined;\n  for (let i = 0; i < 2; i++) {\n    const searchResults = await searchCodeBase(\n      credentials.userId!,\n      credentials.khulnasoftPublicKey!,\n      credentials.khulnasoftPrivateKey!,\n      {\n        query: userPrompt,\n        repoInfo,\n        limit: 10,\n      }\n    );\n    if (i === 0 && searchResults.length === 0) {\n      if (SUGGEST_INDEXING) {\n        if (s) {\n          s.stop(\n            \"Codebase index not found. Indexing allows the CLI to automatically find relevant files.\"\n          );\n          s = undefined;\n        }\n        const confirmIndex = await confirm({\n          message: \"Do you want to index the codebase?\",\n          active: \"Yes\",\n          inactive: \"Skip\",\n        });\n        if (confirmIndex === true) {\n          await codeIndexing(sys, credentials);\n          continue;\n        }\n      }\n    }\n\n    const allFiles = await getAllProjectFiles(appRootDir);\n\n    if (searchResults.length > 0) {\n      for (const file of allFiles) {\n        const importance = shouldIncludeFile(\n          file,\n          searchResults,\n          sessionContext.selectedFilePaths\n        );\n        if (importance !== 0) {\n          files.push(file);\n          sessionContext.selectedFilePaths.set(file, importance);\n        } else if (shouldIncludeHiddenFile(sys, file)) {\n          hiddenFiles.push(file);\n        }\n      }\n\n      if (s) {\n        s.stop(\n          `Found relevant files of the project:\\n${dim(\"\u2502\")}\\n${files\n            .map((a) => dim(\"\u2502    \" + a))\n            .join(\"\\n\")}`\n        );\n        s = undefined;\n      } else {\n        log.info(\n          `Found relevant files of the project:\\n\\n${files\n            .map((a) => dim(a))\n            .join(\"\\n\")}`\n        );\n      }\n      reranker = undefined;\n    } else {\n      const presampledFiles = allFiles.filter((a) => {\n        const importance = shouldIncludeFile(\n          a,\n          searchResults,\n          sessionContext.selectedFilePaths\n        );\n        return importance === 1 || importance === 2;\n      });\n      reranker = 10;\n      const includeFiles = Math.min(40, presampledFiles.length);\n      const sampledFiles: string[] = [];\n      let i = 0;\n      while (\n        sampledFiles.length < includeFiles &&\n        i < presampledFiles.length * 2\n      ) {\n        i++;\n        const file =\n          presampledFiles[Math.floor(Math.random() * presampledFiles.length)];\n        if (sampledFiles.includes(file)) {\n          continue;\n        }\n        sampledFiles.push(file);\n      }\n\n      for (const file of allFiles) {\n        const importance = shouldIncludeFile(\n          file,\n          sampledFiles,\n          sessionContext.selectedFilePaths\n        );\n        if (importance !== 0) {\n          files.push(file);\n          sessionContext.selectedFilePaths.set(file, importance);\n        } else if (shouldIncludeHiddenFile(sys, file)) {\n          hiddenFiles.push(file);\n        }\n      }\n    }\n    break;\n  }\n\n  if (s) {\n    s.stop(undefined);\n    s = undefined;\n  }\n\n  const customInstructions = await getCustomInstructions(sys, appRootDir);\n  s = spinner();\n  s.start(`Thinking`);\n\n  const body: CodeGenCompletionBody = {\n    url,\n    files: files.map((file) => ({\n      filePath: file,\n      content: sys.readFileSync(sys.join(appRootDir, file))!,\n      importance: sessionContext.selectedFilePaths.get(file) ?? 1,\n    })),\n    customInstructions,\n    hiddenFiles,\n    history: sessionContext.history,\n    mode: mode as \"exact\" | \"creative\",\n    userPrompt: userPrompt,\n    reranker,\n    prevId: sessionContext.history[sessionContext.history.length - 1]?.id,\n  };\n\n  const artifacts: ArtifactItem[] = [];\n  const stream = completionStream(credentials, body);\n  sessionContext.undoStates.push({\n    files: [],\n  });\n\n  for await (const streamItem of stream) {\n    try {\n      async function openedAction(json: ArtifactItem) {\n        if (currentChunks) {\n          process.stdout.write(`\\n`);\n          currentChunks = false;\n        }\n\n        if (json.type === \"file\" && !json.synthetic) {\n          s = spinner();\n          s.start(`${json.actionTitle ?? json.artifactTitle}`);\n        }\n        if (json.type === \"diff\") {\n          s = spinner();\n          s.start(`${json.actionTitle ?? json.artifactTitle}`);\n        }\n        if (json.type === \"done\") {\n          sessionContext.history.push({\n            role: \"user\",\n            content: userPrompt,\n          });\n          sessionContext.history.push({\n            role: \"assistant\",\n            content: json.content,\n            id: json.id,\n          });\n        }\n      }\n\n      async function closedAction(json: ArtifactItem) {\n        if (json.type === \"diff\") {\n          if (s) {\n            s.stop(\n              `${json.actionTitle ?? json.artifactTitle}: ${dim(json.filePath)}`\n            );\n            s = undefined;\n          }\n        }\n        if (json.type === \"file\" && json.filePath) {\n          const filePath = sys.join(appRootDir, json.filePath);\n          const isUpdate = sys.existsSync(filePath);\n          const oldContent = isUpdate ? sys.readFileSync(filePath) : null;\n          sessionContext.undoStates[\n            sessionContext.undoStates.length - 1\n          ].files.push({\n            path: json.filePath,\n            content: oldContent!,\n          });\n          const formatted = await prettierFormat(\n            json.content,\n            undefined,\n            filePath\n          );\n          await sys.writeFile(filePath, formatted);\n          sessionContext.selectedFilePaths.set(json.filePath, 3);\n\n          if (s && !json.synthetic) {\n            s.stop(\n              `${json.actionTitle ?? json.artifactTitle ?? \"Created\"}: ${dim(\n                json.filePath\n              )}`\n            );\n            s = undefined;\n          }\n        }\n        if (json.type === \"shell\") {\n          log.message(\n            `Requested to run command:\\n${bgBlack(\n              \" \" + json.content.trim() + \" \"\n            )}`,\n            {\n              symbol: magenta(\"~\"),\n            }\n          );\n          const r = await confirm({\n            message: \"Do you want to execute and continue?\",\n            active: `Execute ${dim(\"(recommended)\")}`,\n            inactive: \"Skip\",\n          });\n          if (isCancel(r) || !r) {\n            log.warn(\n              `Command skipped. Run it manually:\\n${bgBlack(\n                \" \" + json.content + \" \"\n              )}.`\n            );\n            return;\n          }\n          s = spinner();\n          s.start(`Running \\`${json.content}\\``);\n          const result = await runShell(json.content, {\n            shell: true,\n            stdio: \"inherit\",\n          });\n          if (result) {\n            s.stop(`Command \\`${json.content}\\` completed`);\n          } else {\n            s.stop(`Command \\`${json.content}\\` failed`, 2);\n          }\n          s = undefined;\n        }\n      }\n\n      function deltaAction(json: ArtifactItem, delta: string) {\n        if (json.type === \"text\") {\n          if (!currentChunks) {\n            process.stdout.write(dim(\"\u2502  \\n\") + magenta(\"~  \"));\n            currentChunks = true;\n          }\n          process.stdout.write(delta.replace(/\\n/g, \"\\n\" + magenta(\"\u2502  \")));\n        }\n        if (!json.synthetic && (json.type === \"file\" || json.type === \"diff\")) {\n          if (s) {\n            s.extra(\n              `\\n\\n${highlight\n                .highlightAuto(json.content)\n                .value.split(\"\\n\")\n                .slice(-10)\n                .map((a) =>\n                  a.length > process.stdout.columns\n                    ? a.slice(0, process.stdout.columns - 5)\n                    : a\n                )\n                .join(\"\\n\")}`\n            );\n          }\n        }\n      }\n\n      if (s && !responded) {\n        s.stop(\"\uD83D\uDCA1\");\n        s = undefined;\n        responded = true;\n      }\n\n      if (streamItem.type === \"delta\") {\n        const delta = streamItem.content as string;\n        const lastArtifact = artifacts[artifacts.length - 1];\n        if (lastArtifact) {\n          lastArtifact.content += delta;\n        }\n        await deltaAction(lastArtifact, delta);\n      } else {\n        const lastArtifact = artifacts[artifacts.length - 1];\n        if (lastArtifact) {\n          lastArtifact.incomplete = false;\n          await closedAction(lastArtifact);\n        }\n        artifacts.push(streamItem);\n        await openedAction(streamItem);\n      }\n      if (streamItem.type === \"done\") {\n        break;\n      }\n    } catch {}\n  }\n\n  if (currentChunks) {\n    process.stdout.write(`\\n`);\n    currentChunks = false;\n  }\n}\n\nasync function* completionStream(\n  credentials: Credentials,\n  body: CodeGenCompletionBody\n) {\n  const url = new URL(`${apiAirV2Host}/codegen/completion`);\n  url.searchParams.set(\"apiKey\", credentials.khulnasoftPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    body: JSON.stringify(body),\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.khulnasoftPrivateKey!}`,\n    },\n  });\n  const stream = transformStream(res.body);\n  for await (const value of stream) {\n    if (value.length === 0) {\n      continue;\n    }\n    const json = JSON.parse(value) as ArtifactItem;\n    yield json;\n  }\n}\n\nasync function completionFeedback(\n  credentials: Credentials,\n  id: string,\n  feedbackSentiment?: \"positive\" | \"negative\",\n  feedbackText?: string\n) {\n  const url = new URL(`${apiAirV2Host}/codegen/feedback`);\n  url.searchParams.set(\"apiKey\", credentials.khulnasoftPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n  await safeFetch(url, {\n    method: \"POST\",\n    body: JSON.stringify({\n      id: id,\n      feedbackText,\n      feedbackSentiment: feedbackSentiment,\n    }),\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.khulnasoftPrivateKey!}`,\n    },\n  });\n}\nasync function searchCodeBase(\n  userId: string,\n  spaceId: string,\n  privateKey: string,\n  body: CodeGenSearchBody\n) {\n  const url = new URL(`${apiAirV2Host}/codegen/search`);\n  url.searchParams.set(\"apiKey\", spaceId!);\n  url.searchParams.set(\"userId\", userId!);\n  const res = await fetch(url, {\n    method: \"POST\",\n    body: JSON.stringify(body),\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${privateKey!}`,\n    },\n  });\n  const results = (await res.json()) as RankedResult[];\n\n  const setFiles = new Set<string>();\n  for (const result of results) {\n    setFiles.add(result.filePath);\n  }\n  return Array.from(setFiles);\n}\n\nexport async function createApp(\n  userId: string,\n  spaceId: string,\n  privateKey: string,\n  body: any\n) {\n  console.log({\n    userId,\n    spaceId,\n    privateKey,\n    body,\n  });\n  const url = new URL(`${apiAirV2Host}/codegen/create-app`);\n  url.searchParams.set(\"apiKey\", spaceId!);\n  url.searchParams.set(\"userId\", userId!);\n  const res = await fetch(url, {\n    method: \"POST\",\n    body: JSON.stringify(body),\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${privateKey!}`,\n    },\n  });\n  const results = await res.json();\n  console.log(\"results\", results);\n  return;\n}\n\nfunction shouldIncludeHiddenFile(sys: DevToolsSys, file: string) {\n  if (file.includes(\".test.\")) {\n    return false;\n  }\n  if (file.includes(\".spec.\")) {\n    return false;\n  }\n  if (file.includes(\".unit.\")) {\n    return false;\n  }\n  if (file.includes(\".e2e.\")) {\n    return false;\n  }\n  if (file.includes(\"test\")) {\n    return false;\n  }\n  if (file.includes(\"tests\")) {\n    return false;\n  }\n  if (sys.basename(file).startsWith(\".\")) {\n    return false;\n  }\n  return true;\n}\n\nfunction shouldIncludeFile(\n  file: string,\n  foundFiles: string[],\n  selectedFilePaths: Map<string, Importance>\n): Importance | 0 {\n  const defaultImportance = selectedFilePaths.get(file) ?? 0;\n  if (file.endsWith(\"package.json\")) {\n    return 3;\n  }\n  if (file.endsWith(\"tsconfig.json\")) {\n    return 3;\n  }\n  if (file.includes(\"tailwind.config\")) {\n    return 3;\n  }\n  if (file.endsWith(\"components.json\")) {\n    return 3;\n  }\n\n  if (file.includes(\"components/ui/\")) {\n    return defaultImportance;\n  }\n  if (file.endsWith(\".mapper.tsx\") || file.endsWith(\".mapper.jsx\")) {\n    return defaultImportance;\n  }\n  if (file.endsWith(\"package-lock.json\")) {\n    return defaultImportance;\n  }\n  if (file.endsWith(\"khulnasoft-registry.ts\")) {\n    return defaultImportance;\n  }\n\n  if (file.includes(\"layout\")) {\n    return Math.max(defaultImportance, 2) as Importance;\n  }\n\n  if (countSlashes(file) < 2) {\n    if (file.endsWith(\".css\") || file.endsWith(\".scss\")) {\n      return Math.max(defaultImportance, 2) as Importance;\n    }\n  }\n\n  if (foundFiles.length > 0) {\n    if (foundFiles.some((a) => file.includes(a))) {\n      return Math.max(defaultImportance, 2) as Importance;\n    }\n  } else {\n    if (file.includes(\"components/ui/\")) {\n      return defaultImportance;\n    }\n  }\n\n  // not include if not code file (.ts, .tsx, .js, .jsx, .md, .html)\n  if (\n    !file.endsWith(\".ts\") &&\n    !file.endsWith(\".tsx\") &&\n    !file.endsWith(\".js\") &&\n    !file.endsWith(\".jsx\") &&\n    !file.endsWith(\".html\")\n  ) {\n    return defaultImportance;\n  }\n  return Math.max(defaultImportance, 1) as Importance;\n}\n\nfunction countSlashes(str: string): number {\n  return (str.match(/\\//g) || []).length;\n}\n\nexport async function* transformStream(\n  body: ReadableStream<Uint8Array> | null\n) {\n  if (!body) {\n    return;\n  }\n  let accumulatedValue = \"\";\n  const reader = body.getReader();\n  let done, value;\n  while (!done) {\n    ({ value, done } = await reader.read());\n    if (done) {\n      break;\n    } else {\n      const str = new TextDecoder().decode(value);\n      accumulatedValue += str;\n      const parts = accumulatedValue.split(\"\\n\");\n      for (let i = 0; i < parts.length - 1; i++) {\n        yield parts[i];\n      }\n      accumulatedValue = parts[parts.length - 1];\n    }\n  }\n}\n\nfunction runShell(cmd: string, options?: SpawnOptions) {\n  let child: ChildProcess;\n\n  const command = new Promise<boolean>((resolve) => {\n    try {\n      child = spawn(cmd, {\n        shell: true,\n        ...options,\n      });\n\n      child.on(\"error\", () => {\n        resolve(false);\n      });\n\n      child.on(\"close\", (code) => {\n        if (code === 0) {\n          resolve(true);\n        } else {\n          resolve(false);\n        }\n      });\n    } catch (e: any) {\n      resolve(false);\n    }\n  });\n\n  return command;\n}\n\nasync function getCustomInstructions(sys: DevToolsSys, basePath: string) {\n  const customInstructions: CustomInstruction[] = [];\n  async function tryAddCustomInstructions(path: string) {\n    try {\n      const ignorePath = sys.resolve(basePath, path);\n      if (await sys.exists(ignorePath)) {\n        const customInstructionsContent = await sys.readFile(ignorePath);\n        if (customInstructionsContent) {\n          const id = \"hash-\" + (await sys.hash(customInstructionsContent));\n          customInstructions.push({\n            id: id,\n            name: path,\n            content: customInstructionsContent,\n          });\n        }\n      }\n    } catch (error) {\n      console.debug(`No ${path} found or error reading it:`, error);\n    }\n  }\n  await tryAddCustomInstructions(\".cursorrules\");\n  await tryAddCustomInstructions(\".khulnasoftrules\");\n  return customInstructions;\n}\n\ndeclare const VERSION: string;\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import isUnicodeSupported from \"is-unicode-supported\";\nimport color from \"picocolors\";\nimport { cursor, erase } from \"sisteransi\";\nimport type { Key } from \"node:readline\";\n\nimport { stdin, stdout } from \"node:process\";\nimport * as readline from \"node:readline\";\nimport { green, red } from \"picocolors\";\n\nexport const spinner = () => {\n  const frames = unicode ? [\"\u25D2\", \"\u25D0\", \"\u25D3\", \"\u25D1\"] : [\"\u2022\", \"o\", \"O\", \"0\"];\n  const delay = unicode ? 80 : 120;\n\n  let unblock: () => void;\n  let loop: NodeJS.Timeout;\n  let isSpinnerActive: boolean = false;\n  let _message: string = \"\";\n  let _extra: string = \"\";\n  let _lastMessage: string = \"\";\n\n  const handleExit = (code: number) => {\n    const msg = code > 1 ? \"Something went wrong\" : \"Canceled\";\n    if (isSpinnerActive) stop(msg, code);\n  };\n\n  const errorEventHandler = () => handleExit(2);\n  const signalEventHandler = () => handleExit(1);\n\n  const registerHooks = () => {\n    // Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n    process.on(\"uncaughtExceptionMonitor\", errorEventHandler);\n    // Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n    process.on(\"unhandledRejection\", errorEventHandler);\n    // Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n    process.on(\"SIGINT\", signalEventHandler);\n    process.on(\"SIGTERM\", signalEventHandler);\n    process.on(\"exit\", handleExit);\n  };\n\n  const clearHooks = () => {\n    process.removeListener(\"uncaughtExceptionMonitor\", errorEventHandler);\n    process.removeListener(\"unhandledRejection\", errorEventHandler);\n    process.removeListener(\"SIGINT\", signalEventHandler);\n    process.removeListener(\"SIGTERM\", signalEventHandler);\n    process.removeListener(\"exit\", handleExit);\n  };\n\n  const start = (msg: string = \"\"): void => {\n    isSpinnerActive = true;\n    unblock = block();\n    _message = msg.replace(/\\.+$/, \"\");\n    process.stdout.write(`${color.gray(S_BAR)}\\n`);\n    let frameIndex = 0;\n    let dotsTimer = 0;\n    registerHooks();\n    loop = setInterval(() => {\n      const frame = color.magenta(frames[frameIndex]);\n      const loadingDots = \".\".repeat(Math.floor(dotsTimer)).slice(0, 3);\n      process.stdout.write(\n        cursor.move(-999, -_lastMessage.split(\"\\n\").length + 1)\n      );\n      process.stdout.write(erase.down(_lastMessage.split(\"\\n\").length));\n      const toWrite = `${frame}  ${_message}${loadingDots}${_extra}`;\n      process.stdout.write(toWrite);\n      frameIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n      dotsTimer = dotsTimer < frames.length ? dotsTimer + 0.125 : 0;\n      _lastMessage = toWrite;\n    }, delay) as any;\n  };\n\n  const stop = (msg?: string, code: number = 0): void => {\n    _message = msg ?? _message;\n    isSpinnerActive = false;\n    clearInterval(loop);\n    const step =\n      code === 0\n        ? green(S_STEP_SUBMIT)\n        : code === 1\n        ? red(S_STEP_CANCEL)\n        : red(S_STEP_ERROR);\n    process.stdout.write(\n      cursor.move(-999, -_lastMessage.split(\"\\n\").length + 1)\n    );\n    process.stdout.write(erase.down(_lastMessage.split(\"\\n\").length));\n    process.stdout.write(`${step}  ${_message}\\n`);\n    _lastMessage = _message;\n    clearHooks();\n    unblock();\n  };\n\n  const message = (msg: string = \"\"): void => {\n    _message = msg ?? _message;\n  };\n\n  const extra = (msg: string = \"\"): void => {\n    _extra = msg;\n  };\n\n  return {\n    start,\n    stop,\n    message,\n    extra,\n  };\n};\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\n\nconst S_BAR = s(\"\u2502\", \"|\");\n\nconst S_STEP_CANCEL = s(\"\u25A0\", \"x\");\nconst S_STEP_ERROR = s(\"\u25B2\", \"x\");\nconst S_STEP_SUBMIT = s(\"\u25C7\", \"o\");\n\nconst isWindows = globalThis.process.platform.startsWith(\"win\");\n\nexport function block({\n  input = stdin,\n  output = stdout,\n  overwrite = true,\n  hideCursor = true,\n} = {}) {\n  const rl = readline.createInterface({\n    input,\n    output,\n    prompt: \"\",\n    tabSize: 1,\n  });\n  readline.emitKeypressEvents(input, rl);\n  if (input.isTTY) input.setRawMode(true);\n\n  const clear = (data: Buffer, { name }: Key) => {\n    const str = String(data);\n    if (str === \"\\x03\") {\n      if (hideCursor) output.write(cursor.show);\n      process.exit(0);\n      return;\n    }\n    if (!overwrite) return;\n    let dx = name === \"return\" ? 0 : -1;\n    let dy = name === \"return\" ? -1 : 0;\n\n    readline.moveCursor(output, dx, dy, () => {\n      readline.clearLine(output, 1, () => {\n        input.once(\"keypress\", clear);\n      });\n    });\n  };\n  if (hideCursor) output.write(cursor.hide);\n  input.once(\"keypress\", clear);\n\n  return () => {\n    input.off(\"keypress\", clear);\n    if (hideCursor) output.write(cursor.show);\n\n    // Prevent Windows specific issues: https://github.com/natemoo-re/clack/issues/176\n    if (input.isTTY && !isWindows) input.setRawMode(false);\n\n    // @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n    rl.terminal = false;\n    rl.close();\n  };\n}\n", "import type { DevToolsSys } from \"../types\";\nimport type { CLIArgs } from \"./index\";\n\nimport { bold, bgCyan, dim, white } from \"picocolors\";\nimport { getAllProjectFiles } from \"./sync-utils\";\n\nimport { intro, outro } from \"@clack/prompts\";\nimport { spinner } from \"./spinner\";\nimport { getCredentials, type Credentials } from \"./credentials\";\nimport { apiAirV2Host } from \"./constants\";\nimport { transformStream } from \"./code\";\nimport crypto from \"crypto\";\n\nexport interface ArtifactItem {\n  type: \"shell\" | \"file\" | \"text\" | \"delta\" | \"done\";\n  id?: string;\n  content: string;\n  filePath?: string;\n  artifactTitle?: string;\n  incomplete?: boolean;\n}\n\ninterface CodebaseIndexingProgress {\n  type: \"progress\";\n  chunksProcessed: number;\n  totalChunks: number;\n}\n\ninterface Diagnostic {\n  type: \"embedding-error\" | \"extra-context-error\";\n  files: string[];\n}\n\ninterface IndexingContext {\n  type: \"stats\";\n  inputTokens: number;\n  cachedInputTokens: number;\n  outputTokens: number;\n  totalChunks: number;\n  embeddingTokens: number;\n  writtenVectors: number;\n  dbWrites: number;\n  diagnostics: Diagnostic[];\n}\n\nconst INDEXING_POOL = 16;\nconst INDEXING_MAX_REQUEST_SIZE = 200000;\nconst INDEXING_MAX_FILE_SIZE = 300000;\n\ntype CodebaseDataEvent = CodebaseIndexingProgress | IndexingContext;\n\nexport const runCodeIndexing = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" code indexing \"))) + `  ` + dim(VERSION));\n\n  const credentials = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    khulnasoftPrivateKey: true,\n    khulnasoftPublicKey: true,\n  });\n\n  await codeIndexing(sys, credentials);\n\n  outro(\"DONE\");\n};\n\nexport const codeIndexing = async (\n  sys: DevToolsSys,\n  credentials: Credentials\n) => {\n  let s = spinner();\n  s.start(`Indexing files...`);\n\n  const appRootDir = sys.getAppRootDir();\n  const files = await getAllProjectFiles(appRootDir);\n\n  const allFileContents = files\n    .filter(shouldIncludeFile)\n    .map((file) => ({\n      filePath: file,\n      content: sys.readFileSync(sys.join(appRootDir, file))!,\n    }))\n    .filter((file) => file.content.length < INDEXING_MAX_FILE_SIZE);\n\n  const fileGroups: {\n    filePath: string;\n    content: string;\n  }[][] = [];\n\n  let currentGroup: {\n    filePath: string;\n    content: string;\n  }[] = [];\n  fileGroups.push(currentGroup);\n\n  let currentSize = 0;\n  for (const file of allFileContents) {\n    if (currentSize + file.content.length > INDEXING_MAX_REQUEST_SIZE) {\n      currentGroup = [];\n      fileGroups.push(currentGroup);\n      currentSize = 0;\n    }\n    currentGroup.push(file);\n    currentSize += file.content.length;\n  }\n\n  let currentStep = 0;\n  const totalBatch = fileGroups.length;\n  let startTime = Date.now();\n\n  function updateProgress(delta: number) {\n    currentStep += delta;\n    const progressBarChar = \"\u2591\";\n    const maxLength = 60;\n    const progress = currentStep / totalBatch;\n    const progressBar = progressBarChar.repeat(\n      Math.floor(progress * maxLength)\n    );\n    const progressBarEmpty = \" \".repeat(maxLength - progressBar.length);\n    const progressPercentage = `${Math.round(progress * 100)}%`;\n\n    const elapsedMs = Date.now() - startTime;\n    const estimatedTotalMs = progress > 0 ? elapsedMs / progress : 0;\n    const remainingMs = Math.max(0, estimatedTotalMs - elapsedMs);\n    const remainingTime = new Date(remainingMs).toISOString().substr(11, 8);\n\n    s.extra(\n      `\\n\\n[${progressBar}${progressBarEmpty}] ${progressPercentage} (${remainingTime} remaining)`\n    );\n  }\n\n  updateProgress(0);\n\n  const sessionId = crypto.randomUUID();\n  const repoInfo = await sys.getRepoInfo();\n  await Promise.all(\n    Array.from({ length: INDEXING_POOL }).map(async () => {\n      while (true) {\n        const fileContents = fileGroups.shift();\n        if (!fileContents) {\n          break;\n        }\n        const url = new URL(`${apiAirV2Host}/codegen/indexing`);\n        url.searchParams.set(\"apiKey\", credentials.khulnasoftPublicKey!);\n        url.searchParams.set(\"userId\", credentials.userId!);\n        const response = await fetch(url, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${credentials.khulnasoftPrivateKey}`,\n          },\n          body: JSON.stringify({\n            repoInfo,\n            files: fileContents,\n            sessionId: sessionId,\n            addExtraContext: true,\n          }),\n        });\n        if (!response.ok) {\n          throw new Error(\"Failed to index codebase\");\n        }\n        const stream = transformStream(response.body);\n        let lastProgress = 0;\n        for await (const chunk of stream) {\n          if (chunk.length === 0) {\n            continue;\n          }\n          const json = JSON.parse(chunk) as CodebaseDataEvent;\n          if (json.type === \"progress\") {\n            const progress = json.chunksProcessed / json.totalChunks;\n            updateProgress(progress - lastProgress);\n            lastProgress = progress;\n          }\n        }\n      }\n    })\n  );\n\n  s.stop(\"Codebase indexed\");\n};\n\ndeclare const VERSION: string;\n\nfunction shouldIncludeFile(file: string) {\n  if (file.endsWith(\"package.json\")) {\n    return true;\n  }\n\n  // not include if not code file (.ts, .tsx, .js, .jsx, .md, .html)\n  if (\n    !file.endsWith(\".ts\") &&\n    !file.endsWith(\".tsx\") &&\n    !file.endsWith(\".js\") &&\n    !file.endsWith(\".jsx\") &&\n    !file.endsWith(\".html\")\n  ) {\n    return false;\n  }\n  if (file.includes(\".mapper.ts\") || file.includes(\".mapper.js\")) {\n    return false;\n  }\n  if (file.endsWith(\"package-lock.json\")) {\n    return false;\n  }\n\n  return true;\n}\n"],
  "mappings": "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G,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,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,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,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,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,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,GAAG,EAAE,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,GAAG,GAAG,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,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,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,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,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,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,EAE1jDC,IAAwB,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,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,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,GAAG,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,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE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AAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA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C,EAAmB,cACrBF,EAAmB,IACnBF,EAAM,SAASG,CAAY,EAC3B,gBAAkBH,EAAM,SAJC,UAI4B,EACvD,IAEIK,EAAsB,CAC1B,UAAW,OACX,MAAO,oBACT,EAKMC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEP,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACX,EACAA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACP,CAAC,CACH,CACF,EAEMQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,uFAA2F,EACpG,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EAEMC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACwC,EAC5C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAGhEY,EAAoB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,QACF,EAGMC,EAAiB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,QACF,EAEMC,EAAa,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,cACF,EAEMC,EAAiB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,UACF,EAaMC,EAAe,CACnB,KAAMH,EACN,QAASD,EACT,QAde,CACf,OACA,QACA,UACA,UACA,MACF,EASE,SANe,CAAE,SAAU,EAO3B,YAAaE,CACf,EAEMG,EAAoB,CACxB,UAAW,oBACX,UAAW,EACX,SAAU,CAER,MAAOF,CAAe,EACxB,MAAOd,EAAM,OACX,KACA,eACA,SACA,UACA,aACA,YACAD,EAAK,SACLC,EAAM,UAAU,kBAAkB,CAAC,CACvC,EAEMiB,EAAsB,CAC1BD,EACAR,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMY,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUH,EACV,SAAUE,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUF,EACV,SAAUE,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,UAAW,WACX,MAAO,IAAMf,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUK,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOb,EACP,SAAUa,EACV,UAAW,CACb,EACA,CACE,MAAOL,EACP,YAAa,GACb,SAAU,CAAED,CAAW,EACvB,UAAW,CACb,EAGA,CACE,MAAO,KACP,UAAW,CACb,EAEA,CACE,MAAO,IACP,eAAgB,GAChB,SAAU,CACRH,EACAC,CACF,CACF,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUQ,EACV,UAAW,EACX,SAAU,CACRd,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUU,EACV,UAAW,EACX,SAAU,CACR,OACAd,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,MACN,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,KACF,EACA,SAAUO,EACV,QAAS,KACT,iBAAkB,CAAE,oBAAqB,UAAW,EACpD,SAAU,CAAC,EAAE,OACXG,EACAC,EACAH,EACAC,EACA,CACET,EACA,CACE,MAAO,4MACP,IAAK,IACL,SAAUO,EACV,SAAU,CACR,OACAV,CACF,CACF,EACA,CACE,MAAON,EAAK,SAAW,KACvB,SAAUgB,CACZ,EACA,CACE,MAAO,CAEL,wDACA,MACA,KACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAC,CACL,CACF,CAWA,SAASK,GAAQrB,EAAM,CACrB,IAAMsB,EAAa,CACjB,KAAM,CACJ,UACA,OACA,OACA,QACF,EACA,SAAU,CACR,qBACA,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,IACF,EACA,OAAQ,CACN,QACA,OACA,gCACA,wBACA,wBACA,uBACA,uBACA,sBACA,sBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EACA,QAAS,CACP,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,WACA,WACA,UACA,SACA,QACA,OACA,KACF,CACF,EAEMC,EAAUxB,GAAUC,CAAI,EAExBwB,EAAyCD,EAAQ,SAEvD,OAAAC,EAAI,KAAO,CACT,GAAGA,EAAI,KACP,GAAGF,EAAW,IAChB,EACAE,EAAI,QAAU,CACZ,GAAGA,EAAI,QACP,GAAGF,EAAW,OAChB,EACAE,EAAI,SAAW,CACb,GAAGA,EAAI,SACP,GAAGF,EAAW,QAChB,EACAE,EAAI,OAASF,EAAW,OAExBC,EAAQ,KAAO,UACfA,EAAQ,QAAU,CAAE,KAAM,EAC1BA,EAAQ,WAAa,MAEdA,CACT,CC97BA,SAASE,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAM,CAAC,EACPC,EAAa,CACjB,MAAO,OACP,IAAK,KACL,SAAU,CACR,OACA,CACE,MAAO,KACP,SAAU,CAAED,CAAI,CAClB,CACF,CACF,EACA,OAAO,OAAOA,EAAK,CACjB,UAAW,WACX,SAAU,CACR,CAAE,MAAOD,EAAM,OAAO,qBAGpB,qBAAqB,CAAE,EACzBE,CACF,CACF,CAAC,EAED,IAAMC,EAAQ,CACZ,UAAW,QACX,MAAO,OACP,IAAK,KACL,SAAU,CAAEJ,EAAK,gBAAiB,CACpC,EACMK,EAAW,CACf,MAAO,iBACP,OAAQ,CAAE,SAAU,CAClBL,EAAK,kBAAkB,CACrB,MAAO,QACP,IAAK,QACL,UAAW,QACb,CAAC,CACH,CAAE,CACJ,EACMM,EAAe,CACnB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLE,EACAE,CACF,CACF,EACAA,EAAM,SAAS,KAAKE,CAAY,EAChC,IAAMC,EAAgB,CACpB,MAAO,KACT,EACMC,EAAc,CAClB,UAAW,SACX,MAAO,IACP,IAAK,GACP,EACMC,EAAe,CACnB,MAAO,KACT,EACMC,EAAa,CACjB,MAAO,UACP,IAAK,OACL,SAAU,CACR,CACE,MAAO,gBACP,UAAW,QACb,EACAV,EAAK,YACLE,CACF,CACF,EACMS,EAAiB,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,MACF,EACMC,EAAgBZ,EAAK,QAAQ,CACjC,OAAQ,IAAIW,EAAe,KAAK,GAAG,CAAC,IACpC,UAAW,EACb,CAAC,EACKE,EAAW,CACf,UAAW,WACX,MAAO,4BACP,YAAa,GACb,SAAU,CAAEb,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,YAAa,CAAC,CAAE,EACnE,UAAW,CACb,EAEMc,EAAW,CACf,KACA,OACA,OACA,OACA,KACA,MACA,QACA,QACA,KACA,KACA,OACA,OACA,OACA,WACA,QACF,EAEMC,EAAW,CACf,OACA,OACF,EAGMC,EAAY,CAAE,MAAO,gBAAiB,EAGtCC,EAAkB,CACtB,QACA,KACA,WACA,OACA,OACA,OACA,SACA,UACA,OACA,MACA,WACA,SACA,QACA,OACA,QACA,OACA,QACA,OACF,EAEMC,EAAiB,CACrB,QACA,OACA,UACA,SACA,UACA,UACA,OACA,SACA,OACA,MACA,QACA,SACA,UACA,SACA,OACA,YACA,SACA,OACA,UACA,SACA,SACF,EAEMC,EAAgB,CACpB,WACA,KACA,UACA,MACA,MACA,QACA,QACA,gBACA,WACA,UACA,eACA,YACA,aACA,YACA,WACA,UACA,aACA,OACA,UACA,SACA,SACA,SACA,UACA,KACA,KACA,QACA,YACA,SACA,QACA,UACA,UACA,OACA,OACA,QACA,MACA,SACA,OACA,QACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,SACA,aACA,SACA,UACA,WACA,QACA,OACA,SACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,aACA,QACA,OACA,cACA,UACA,SACA,MACF,EAEMC,EAAiB,CACrB,QACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,YACA,KACA,KACA,QACA,SACA,QACA,SACA,KACA,WACA,KACA,QACA,QACA,OACA,QACA,WACA,OACA,QACA,SACA,SACA,MACA,QACA,OACA,SACA,MACA,SACA,MACA,OACA,OACA,OACA,SACA,KACA,SACA,KACA,QACA,MACA,KACA,UACA,YACA,YACA,YACA,YACA,OACA,OACA,QACA,MACA,MACA,OACA,KACA,QACA,WACA,OACA,KACA,OACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,SAEA,SACA,SACA,KACA,OACA,UACA,OACA,QACA,QACA,UACA,QACA,WACA,SACA,MACA,WACA,SACA,MACA,QACA,OACA,SACA,OACA,MACA,OACA,UAEA,MACA,QACA,SACA,SACA,QACA,MACA,SACA,KACF,EAEA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAK,EAChB,SAAU,CACR,SAAU,wBACV,QAASN,EACT,QAASC,EACT,SAAU,CACR,GAAGE,EACH,GAAGC,EAEH,MACA,QACA,GAAGC,EACH,GAAGC,CACL,CACF,EACA,SAAU,CACRR,EACAZ,EAAK,QAAQ,EACba,EACAH,EACAV,EAAK,kBACLK,EACAW,EACAV,EACAC,EACAC,EACAC,EACAP,CACF,CACF,CACF,CC7XA,SAASmB,GAAEC,EAAM,CACf,IAAMC,EAAQD,EAAK,MAIbE,EAAsBF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAO,CAAE,CAAE,CAAC,EACjFG,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,IACrBF,EAAmB,IACnBF,EAAM,SAASG,CAAY,EAC3B,gBAAkBH,EAAM,SAJC,UAI4B,EACvD,IAGIK,EAAQ,CACZ,UAAW,OACX,SAAU,CACR,CAAE,MAAO,oBAAqB,EAC9B,CAAE,MAAO,uBAAwB,CACnC,CAEF,EAKMC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEP,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACX,EACAA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACP,CAAC,CACH,CACF,EAEMQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,uFAA2F,EACpG,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EAEMC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACwC,EAC5C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAsEhEY,EAAW,CACf,QArEiB,CACjB,MACA,OACA,QACA,OACA,WACA,UACA,KACA,OACA,OACA,SACA,MACA,UACA,OACA,KACA,SACA,WACA,WACA,SACA,SACA,SACA,SACA,UACA,QACA,WACA,QACA,WACA,WACA,UACA,WACA,YACA,iBACA,gBAEA,UACA,UACA,WACA,gBACA,eAEA,SACF,EA6BE,KA3Bc,CACd,QACA,SACA,SACA,WACA,MACA,QACA,OACA,OACA,OACA,QACA,WACA,aACA,aACA,aACA,cAEA,QACA,SAEA,UACA,OACA,WACF,EAKE,QAAS,kBAET,SAAU,kzBASZ,EAEMC,EAAsB,CAC1BJ,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMO,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUF,EACV,SAAUC,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUD,EACV,SAAUC,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,MAAO,IAAMV,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUC,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOT,EACP,SAAUS,EACV,UAAW,CACb,EACA,CACE,MAAOD,EACP,YAAa,GACb,SAAU,CAAEX,EAAK,QAAQU,EAAY,CAAE,UAAW,gBAAiB,CAAC,CAAE,EACtE,UAAW,CACb,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUE,EACV,UAAW,EACX,SAAU,CACRV,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUM,EACV,UAAW,EACX,SAAU,CACR,OACAV,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,IACN,QAAS,CAAE,GAAI,EACf,SAAUG,EAGV,kBAAmB,GACnB,QAAS,KACT,SAAU,CAAC,EAAE,OACXE,EACAC,EACAF,EACA,CACEJ,EACA,CACE,MAAOT,EAAK,SAAW,KACvB,SAAUY,CACZ,EACA,CACE,UAAW,QACX,cAAe,0BACf,IAAK,WACL,SAAU,CACR,CAAE,cAAe,oBAAqB,EACtCZ,EAAK,UACP,CACF,CACF,CAAC,EACH,QAAS,CACP,aAAcS,EACd,QAASF,EACT,SAAUK,CACZ,CACF,CACF,CCpTA,SAASI,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MAIbE,EAAsBF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAO,CAAE,CAAE,CAAC,EACjFG,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,cACrBF,EAAmB,IACnBF,EAAM,SAASG,CAAY,EAC3B,gBAAkBH,EAAM,SAJC,UAI4B,EACvD,IAEIK,EAAsB,CAC1B,UAAW,OACX,MAAO,oBACT,EAKMC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEP,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACX,EACAA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACP,CAAC,CACH,CACF,EAEMQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,uFAA2F,EACpG,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EAEMC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACwC,EAC5C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAGhEY,EAAoB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,QACF,EAGMC,EAAiB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,QACF,EAEMC,EAAa,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,cACF,EAEMC,EAAiB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,UACF,EAaMC,EAAe,CACnB,KAAMH,EACN,QAASD,EACT,QAde,CACf,OACA,QACA,UACA,UACA,MACF,EASE,SANe,CAAE,SAAU,EAO3B,YAAaE,CACf,EAEMG,EAAoB,CACxB,UAAW,oBACX,UAAW,EACX,SAAU,CAER,MAAOF,CAAe,EACxB,MAAOd,EAAM,OACX,KACA,eACA,SACA,UACA,aACA,YACAD,EAAK,SACLC,EAAM,UAAU,kBAAkB,CAAC,CACvC,EAEMiB,EAAsB,CAC1BD,EACAR,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMY,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUH,EACV,SAAUE,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUF,EACV,SAAUE,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,UAAW,WACX,MAAO,IAAMf,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUK,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOb,EACP,SAAUa,EACV,UAAW,CACb,EACA,CACE,MAAOL,EACP,YAAa,GACb,SAAU,CAAED,CAAW,EACvB,UAAW,CACb,EAGA,CACE,MAAO,KACP,UAAW,CACb,EAEA,CACE,MAAO,IACP,eAAgB,GAChB,SAAU,CACRH,EACAC,CACF,CACF,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUQ,EACV,UAAW,EACX,SAAU,CACRd,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUU,EACV,UAAW,EACX,SAAU,CACR,OACAd,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,MACN,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,KACF,EACA,SAAUO,EACV,QAAS,KACT,iBAAkB,CAAE,oBAAqB,UAAW,EACpD,SAAU,CAAC,EAAE,OACXG,EACAC,EACAH,EACAC,EACA,CACET,EACA,CACE,MAAO,4MACP,IAAK,IACL,SAAUO,EACV,SAAU,CACR,OACAV,CACF,CACF,EACA,CACE,MAAON,EAAK,SAAW,KACvB,SAAUgB,CACZ,EACA,CACE,MAAO,CAEL,wDACA,MACA,KACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAC,CACL,CACF,CC5iBA,SAASK,GAAOC,EAAM,CACpB,IAAMC,EAAoB,CACxB,OACA,OACA,OACA,UACA,WACA,SACA,UACA,OACA,QACA,MACA,OACA,OACA,QACA,SACA,QACA,QACA,SACA,QACA,OACA,QACF,EACMC,EAAqB,CACzB,SACA,UACA,YACA,SACA,WACA,YACA,WACA,QACA,SACA,WACA,SACA,UACA,MACA,SACA,SACF,EACMC,EAAmB,CACvB,UACA,QACA,OACA,MACF,EACMC,EAAkB,CACtB,WACA,KACA,OACA,QACA,OACA,QACA,QACA,QACA,WACA,KACA,OACA,QACA,WACA,SACA,UACA,QACA,MACA,UACA,OACA,KACA,WACA,KACA,YACA,WACA,KACA,OACA,YACA,MACA,WACA,MACA,WACA,SACA,UACA,YACA,SACA,WACA,SACA,MACA,SACA,SACA,SACA,SACA,aACA,SACA,SACA,SACA,OACA,QACA,MACA,SACA,YACA,SACA,QACA,UACA,OACA,WACA,OACF,EACMC,EAAsB,CAC1B,MACA,QACA,MACA,YACA,QACA,QACA,KACA,aACA,SACA,OACA,MACA,SACA,QACA,OACA,OACA,OACA,MACA,SACA,MACA,UACA,KACA,KACA,UACA,UACA,SACA,SACA,MACA,YACA,UACA,MACA,OACA,QACA,OACA,OACF,EAEMC,EAAW,CACf,QAASF,EAAgB,OAAOC,CAAmB,EACnD,SAAUJ,EACV,QAASE,CACX,EACMI,EAAaP,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,oBAAqB,CAAC,EAC1EQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,iEAAqE,EAC9E,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EACMC,EAAkB,CACtB,UAAW,SACX,MAAO,KACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,EACMC,EAAwBV,EAAK,QAAQS,EAAiB,CAAE,QAAS,IAAK,CAAC,EACvEE,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUL,CACZ,EACMM,EAAcZ,EAAK,QAAQW,EAAO,CAAE,QAAS,IAAK,CAAC,EACnDE,EAAsB,CAC1B,UAAW,SACX,MAAO,MACP,IAAK,IACL,QAAS,KACT,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,MAAO,EAChBb,EAAK,iBACLY,CACF,CACF,EACME,EAA+B,CACnC,UAAW,SACX,MAAO,OACP,IAAK,IACL,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,IAAK,EACdH,CACF,CACF,EACMI,EAAqCf,EAAK,QAAQc,EAA8B,CACpF,QAAS,KACT,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,IAAK,EACdF,CACF,CACF,CAAC,EACDD,EAAM,SAAW,CACfG,EACAD,EACAJ,EACAT,EAAK,iBACLA,EAAK,kBACLQ,EACAR,EAAK,oBACP,EACAY,EAAY,SAAW,CACrBG,EACAF,EACAH,EACAV,EAAK,iBACLA,EAAK,kBACLQ,EACAR,EAAK,QAAQA,EAAK,qBAAsB,CAAE,QAAS,IAAK,CAAC,CAC3D,EACA,IAAMgB,EAAS,CAAE,SAAU,CACzBF,EACAD,EACAJ,EACAT,EAAK,iBACLA,EAAK,iBACP,CAAE,EAEIiB,EAAmB,CACvB,MAAO,IACP,IAAK,IACL,SAAU,CACR,CAAE,cAAe,QAAS,EAC1BV,CACF,CACF,EACMW,EAAgBlB,EAAK,SAAW,KAAOA,EAAK,SAAW,aAAeA,EAAK,SAAW,iBACtFmB,EAAgB,CAGpB,MAAO,IAAMnB,EAAK,SAClB,UAAW,CACb,EAEA,MAAO,CACL,KAAM,KACN,QAAS,CACP,KACA,IACF,EACA,SAAUM,EACV,QAAS,KACT,SAAU,CACRN,EAAK,QACH,MACA,IACA,CACE,YAAa,GACb,SAAU,CACR,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAO,MACP,UAAW,CACb,EACA,CAAE,MAAO,UAAW,EACpB,CACE,MAAO,MACP,IAAK,GACP,CACF,CACF,CACF,CACF,CACF,EACAA,EAAK,oBACLA,EAAK,qBACL,CACE,UAAW,OACX,MAAO,IACP,IAAK,IACL,SAAU,CAAE,QAAS,qFAAsF,CAC7G,EACAgB,EACAR,EACA,CACE,cAAe,kBACf,UAAW,EACX,IAAK,QACL,QAAS,UACT,SAAU,CACR,CAAE,cAAe,aAAc,EAC/BD,EACAU,EACAjB,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CACE,cAAe,YACf,UAAW,EACX,IAAK,QACL,QAAS,SACT,SAAU,CACRO,EACAP,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CACE,cAAe,SACf,UAAW,EACX,IAAK,QACL,QAAS,SACT,SAAU,CACRO,EACAU,EACAjB,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CAEE,UAAW,OACX,MAAO,oBACP,aAAc,GACd,IAAK,MACL,WAAY,GACZ,SAAU,CACR,CACE,UAAW,SACX,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CAGE,cAAe,8BACf,UAAW,CACb,EACA,CACE,UAAW,WACX,MAAO,IAAMkB,EAAgB,SAAWlB,EAAK,SAAW,wBACxD,YAAa,GACb,IAAK,WACL,WAAY,GACZ,SAAUM,EACV,SAAU,CAER,CACE,cAAeJ,EAAmB,KAAK,GAAG,EAC1C,UAAW,CACb,EACA,CACE,MAAOF,EAAK,SAAW,wBACvB,YAAa,GACb,SAAU,CACRA,EAAK,WACLiB,CACF,EACA,UAAW,CACb,EACA,CAAE,MAAO,MAAO,EAChB,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUX,EACV,UAAW,EACX,SAAU,CACRU,EACAR,EACAR,EAAK,oBACP,CACF,EACAA,EAAK,oBACLA,EAAK,oBACP,CACF,EACAmB,CACF,CACF,CACF,CC7YA,IAAMC,GAASC,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACT,EACA,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACT,EACA,kBAAmB,CACjB,UAAW,WACX,MAAO,cACT,EACA,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,iBACP,CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGIC,GAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEMC,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMC,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMC,GAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,EAUV,SAASC,GAAIN,EAAM,CACjB,IAAMO,EAAQP,EAAK,MACbQ,EAAQT,GAAMC,CAAI,EAClBS,EAAgB,CAAE,MAAO,8BAA+B,EACxDC,EAAe,kBACfC,EAAiB,oBACjBC,EAAW,0BACXC,EAAU,CACdb,EAAK,iBACLA,EAAK,iBACP,EAEA,MAAO,CACL,KAAM,MACN,iBAAkB,GAClB,QAAS,UACT,SAAU,CAAE,iBAAkB,SAAU,EACxC,iBAAkB,CAGhB,iBAAkB,cAAe,EACnC,SAAU,CACRQ,EAAM,cACNC,EAGAD,EAAM,gBACN,CACE,UAAW,cACX,MAAO,kBACP,UAAW,CACb,EACA,CACE,UAAW,iBACX,MAAO,MAAQI,EACf,UAAW,CACb,EACAJ,EAAM,wBACN,CACE,UAAW,kBACX,SAAU,CACR,CAAE,MAAO,KAAOL,GAAe,KAAK,GAAG,EAAI,GAAI,EAC/C,CAAE,MAAO,SAAWC,GAAgB,KAAK,GAAG,EAAI,GAAI,CACtD,CACF,EAOAI,EAAM,aACN,CACE,UAAW,YACX,MAAO,OAASH,GAAW,KAAK,GAAG,EAAI,MACzC,EAEA,CACE,MAAO,IACP,IAAK,QACL,SAAU,CACRG,EAAM,cACNA,EAAM,SACNA,EAAM,UACNA,EAAM,gBACN,GAAGK,EAIH,CACE,MAAO,mBACP,IAAK,KACL,UAAW,EACX,SAAU,CAAE,SAAU,cAAe,EACrC,SAAU,CACR,GAAGA,EACH,CACE,UAAW,SAGX,MAAO,OACP,eAAgB,GAChB,WAAY,EACd,CACF,CACF,EACAL,EAAM,iBACR,CACF,EACA,CACE,MAAOD,EAAM,UAAU,GAAG,EAC1B,IAAK,OACL,UAAW,EACX,QAAS,IACT,SAAU,CACR,CACE,UAAW,UACX,MAAOI,CACT,EACA,CACE,MAAO,KACP,eAAgB,GAChB,WAAY,GACZ,UAAW,EACX,SAAU,CACR,SAAU,UACV,QAASD,EACT,UAAWR,GAAe,KAAK,GAAG,CACpC,EACA,SAAU,CACR,CACE,MAAO,eACP,UAAW,WACb,EACA,GAAGW,EACHL,EAAM,eACR,CACF,CACF,CACF,EACA,CACE,UAAW,eACX,MAAO,OAASP,GAAK,KAAK,GAAG,EAAI,MACnC,CACF,CACF,CACF,CCttBA,SAASa,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACnB,MAAO,CACL,KAAM,OACN,QAAS,CAAE,OAAQ,EACnB,SAAU,CACR,CACE,UAAW,OACX,UAAW,GACX,MAAOC,EAAM,OACX,+BACA,8BACA,sBACF,CACF,EACA,CACE,UAAW,UACX,SAAU,CACR,CACE,MAAOA,EAAM,OACX,UACA,SACA,QACA,QACA,UACA,SACA,aACF,EACA,IAAK,GACP,EACA,CAAE,MAAO,UAAW,CACtB,CACF,EACA,CACE,UAAW,WACX,MAAO,MACP,IAAK,GACP,EACA,CACE,UAAW,WACX,MAAO,KACP,IAAK,GACP,EACA,CACE,UAAW,WACX,MAAO,KACP,IAAK,GACP,CACF,CACF,CACF,CClDA,SAASC,GAAGC,EAAM,CAyEhB,IAAMC,EAAW,CACf,QA5BU,CACV,QACA,OACA,OACA,QACA,WACA,UACA,QACA,OACA,cACA,MACA,OACA,KACA,OACA,KACA,SACA,YACA,MACA,UACA,QACA,SACA,SACA,SACA,SACA,OACA,KACF,EAGE,KAnDY,CACZ,OACA,OACA,YACA,aACA,QACA,UACA,UACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,SACA,MACA,OACA,UACA,MACF,EA+BE,QA3Ee,CACf,OACA,QACA,OACA,KACF,EAuEE,SAtEgB,CAChB,SACA,MACA,QACA,UACA,OACA,OACA,MACA,OACA,MACA,QACA,QACA,UACA,OACA,UACA,QACF,CAuDA,EACA,MAAO,CACL,KAAM,KACN,QAAS,CAAE,QAAS,EACpB,SAAUA,EACV,QAAS,KACT,SAAU,CACRD,EAAK,oBACLA,EAAK,qBACL,CACE,UAAW,SACX,SAAU,CACRA,EAAK,kBACLA,EAAK,iBACL,CACE,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAOA,EAAK,YAAc,MAC1B,UAAW,CACb,EACAA,EAAK,aACP,CACF,EACA,CAAE,MAAO,IACT,EACA,CACE,UAAW,WACX,cAAe,OACf,IAAK,cACL,WAAY,GACZ,SAAU,CACRA,EAAK,WACL,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,WAAY,GACZ,SAAUC,EACV,QAAS,MACX,CACF,CACF,CACF,CACF,CACF,CClIA,SAASC,GAAQC,EAAM,CACrB,IAAMC,EAAQD,EAAK,MACbE,EAAW,yBACjB,MAAO,CACL,KAAM,UACN,QAAS,CAAE,KAAM,EACjB,iBAAkB,GAClB,kBAAmB,GACnB,SAAU,CACR,QAAS,CACP,QACA,WACA,eACA,OACA,QACA,SACA,YACA,YACA,QACA,SACA,WACA,OACA,IACF,EACA,QAAS,CACP,OACA,QACA,MACF,CACF,EACA,SAAU,CACRF,EAAK,kBACLA,EAAK,kBACLA,EAAK,YACL,CACE,MAAO,cACP,MAAO,SACP,UAAW,CACb,EACA,CACE,MAAO,cACP,MAAO,4BACP,UAAW,CACb,EACA,CACE,MAAO,WACP,MAAO,KACP,IAAK,KACL,WAAY,GACZ,UAAW,CACb,EACA,CACE,MAAO,OACP,MAAO,OACP,WAAY,EACd,EACA,CACE,MAAO,SACP,MAAOC,EAAM,OAAOC,EAAUD,EAAM,UAAU,MAAM,CAAC,EACrD,UAAW,CACb,CACF,EACA,QAAS,CACP,QACA,OACF,CACF,CACF,CCnEA,SAASE,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MACbE,EAAU,CACd,UAAW,SACX,UAAW,EACX,SAAU,CACR,CAAE,MAAO,sBAAuB,EAChC,CAAE,MAAOF,EAAK,SAAU,CAC1B,CACF,EACMG,EAAWH,EAAK,QAAQ,EAC9BG,EAAS,SAAW,CAClB,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,CACF,EACA,IAAMC,EAAY,CAChB,UAAW,WACX,SAAU,CACR,CAAE,MAAO,mBAAoB,EAC7B,CAAE,MAAO,aAAc,CACzB,CACF,EACMC,EAAW,CACf,UAAW,UACX,MAAO,8BACT,EACMC,EAAU,CACd,UAAW,SACX,SAAU,CAAEN,EAAK,gBAAiB,EAClC,SAAU,CACR,CACE,MAAO,MACP,IAAK,MACL,UAAW,EACb,EACA,CACE,MAAO,MACP,IAAK,MACL,UAAW,EACb,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,CACF,CACF,EACMO,EAAQ,CACZ,MAAO,KACP,IAAK,KACL,SAAU,CACRJ,EACAE,EACAD,EACAE,EACAJ,EACA,MACF,EACA,UAAW,CACb,EAEMM,EAAW,iBACXC,EAA0B,gBAC1BC,EAA0B,UAC1BC,EAAUV,EAAM,OACpBO,EAAUC,EAAyBC,CACrC,EACME,EAAaX,EAAM,OACvBU,EAAS,eAAgBA,EAAS,KAClCV,EAAM,UAAU,eAAe,CACjC,EAEA,MAAO,CACL,KAAM,iBACN,QAAS,CAAE,MAAO,EAClB,iBAAkB,GAClB,QAAS,KACT,SAAU,CACRE,EACA,CACE,UAAW,UACX,MAAO,MACP,IAAK,KACP,EACA,CACE,MAAOS,EACP,UAAW,OACX,OAAQ,CACN,IAAK,IACL,SAAU,CACRT,EACAI,EACAF,EACAD,EACAE,EACAJ,CACF,CACF,CACF,CACF,CACF,CACF,CCrHA,IAAIW,GAAgB,kBAChBC,GAAO,OAAOD,EAAa,IAC3BE,GAAY,8BACZC,GAAU,CACZ,UAAW,SACX,SAAU,CAGR,CAAE,MAAO,QAAQH,EAAa,MAAMC,EAAI,YAAYA,EAAI,eACzCD,EAAa,aAAc,EAE1C,CAAE,MAAO,OAAOA,EAAa,MAAMC,EAAI,8BAA+B,EACtE,CAAE,MAAO,IAAIA,EAAI,aAAc,EAC/B,CAAE,MAAO,OAAOD,EAAa,YAAa,EAG1C,CAAE,MAAO,aAAaE,EAAS,UAAUA,EAAS,SAASA,EAAS,eACrDF,EAAa,aAAc,EAG1C,CAAE,MAAO,gCAAiC,EAG1C,CAAE,MAAO,YAAYE,EAAS,WAAY,EAG1C,CAAE,MAAO,wBAAyB,EAGlC,CAAE,MAAO,+BAAgC,CAC3C,EACA,UAAW,CACb,EAqBA,SAASE,GAAWC,EAAIC,EAAcC,EAAO,CAC3C,OAAIA,IAAU,GAAW,GAElBF,EAAG,QAAQC,EAAcE,GACvBJ,GAAWC,EAAIC,EAAcC,EAAQ,CAAC,CAC9C,CACH,CAGA,SAASE,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAgB,iDAChBC,EAAmBD,EACrBR,GAAW,OAASQ,EAAgB,kBAAoBA,EAAgB,WAAY,OAAQ,CAAC,EAoE3FE,EAAW,CACf,QApEoB,CACpB,eACA,WACA,UACA,MACA,SACA,KACA,SACA,MACA,QACA,WACA,UACA,YACA,SACA,SACA,QACA,OACA,OACA,OACA,QACA,YACA,QACA,aACA,WACA,OACA,SACA,UACA,UACA,SACA,MACA,SACA,WACA,SACA,YACA,SACA,UACA,SACA,WACA,UACA,KACA,SACA,QACA,SACF,EA0BE,QAnBe,CACf,QACA,OACA,MACF,EAgBE,KAdY,CACZ,OACA,UACA,OACA,QACA,MACA,OACA,QACA,QACF,EAME,SA1BgB,CAChB,QACA,MACF,CAwBA,EAEMC,EAAa,CACjB,UAAW,OACX,MAAO,IAAMH,EACb,SAAU,CACR,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAE,MAAO,CACrB,CACF,CACF,EACMI,EAAS,CACb,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUF,EACV,UAAW,EACX,SAAU,CAAEJ,EAAK,oBAAqB,EACtC,WAAY,EACd,EAEA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,KAAM,EACjB,SAAUI,EACV,QAAS,QACT,SAAU,CACRJ,EAAK,QACH,UACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CAEE,MAAO,OACP,UAAW,CACb,EACA,CACE,UAAW,SACX,MAAO,YACT,CACF,CACF,CACF,EAEA,CACE,MAAO,wBACP,SAAU,SACV,UAAW,CACb,EACAA,EAAK,oBACLA,EAAK,qBACL,CACE,MAAO,MACP,IAAK,MACL,UAAW,SACX,SAAU,CAAEA,EAAK,gBAAiB,CACpC,EACAA,EAAK,iBACLA,EAAK,kBACL,CACE,MAAO,CACL,oDACA,MACAE,CACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CAEE,MAAO,aACP,MAAO,SACT,EACA,CACE,MAAO,CACLD,EAAM,OAAO,WAAYC,CAAa,EACtC,MACAA,EACA,MACA,QACF,EACA,UAAW,CACT,EAAG,OACH,EAAG,WACH,EAAG,UACL,CACF,EACA,CACE,MAAO,CACL,SACA,MACAA,CACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,EACA,SAAU,CACRI,EACAN,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CAGE,cAAe,wBACf,UAAW,CACb,EACA,CACE,MAAO,CACL,MAAQG,EAAmB,QAC3BH,EAAK,oBACL,WACF,EACA,UAAW,CAAE,EAAG,gBAAiB,EACjC,SAAUI,EACV,SAAU,CACR,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUA,EACV,UAAW,EACX,SAAU,CACRC,EACAL,EAAK,iBACLA,EAAK,kBACLP,GACAO,EAAK,oBACP,CACF,EACAA,EAAK,oBACLA,EAAK,oBACP,CACF,EACAP,GACAY,CACF,CACF,CACF,CC9RA,IAAME,GAAW,2BACXC,GAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACF,EACMC,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACF,EAGMC,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACF,EAEMC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACF,EAEMC,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACF,EAEMC,GAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACF,EAEMC,GAAY,CAAC,EAAE,OACnBF,GACAF,GACAC,EACF,EAWA,SAASI,GAAWC,EAAM,CACxB,IAAMC,EAAQD,EAAK,MAQbE,EAAgB,CAACC,EAAO,CAAE,MAAAC,CAAM,IAAM,CAC1C,IAAMC,EAAM,KAAOF,EAAM,CAAC,EAAE,MAAM,CAAC,EAEnC,OADYA,EAAM,MAAM,QAAQE,EAAKD,CAAK,IAC3B,EACjB,EAEME,EAAaf,GACbgB,EAAW,CACf,MAAO,KACP,IAAK,KACP,EAEMC,EAAmB,4BACnBC,EAAU,CACd,MAAO,sBACP,IAAK,4BAKL,kBAAmB,CAACN,EAAOO,IAAa,CACtC,IAAMC,EAAkBR,EAAM,CAAC,EAAE,OAASA,EAAM,MAC1CS,EAAWT,EAAM,MAAMQ,CAAe,EAC5C,GAIEC,IAAa,KAGbA,IAAa,IACX,CACFF,EAAS,YAAY,EACrB,MACF,CAIIE,IAAa,MAGVV,EAAcC,EAAO,CAAE,MAAOQ,CAAgB,CAAC,GAClDD,EAAS,YAAY,GAOzB,IAAIG,EACEC,EAAaX,EAAM,MAAM,UAAUQ,CAAe,EAIxD,GAAKE,EAAIC,EAAW,MAAM,OAAO,EAAI,CACnCJ,EAAS,YAAY,EACrB,MACF,CAKA,IAAKG,EAAIC,EAAW,MAAM,gBAAgB,IACpCD,EAAE,QAAU,EAAG,CACjBH,EAAS,YAAY,EAErB,MACF,CAEJ,CACF,EACMK,EAAa,CACjB,SAAUxB,GACV,QAASC,GACT,QAASC,GACT,SAAUK,GACV,oBAAqBD,EACvB,EAGMmB,EAAgB,kBAChBC,EAAO,OAAOD,CAAa,IAG3BE,EAAiB,sCACjBC,EAAS,CACb,UAAW,SACX,SAAU,CAER,CAAE,MAAO,QAAQD,CAAc,MAAMD,CAAI,YAAYA,CAAI,eAC1CD,CAAa,MAAO,EACnC,CAAE,MAAO,OAAOE,CAAc,SAASD,CAAI,eAAeA,CAAI,MAAO,EAGrE,CAAE,MAAO,4BAA6B,EAGtC,CAAE,MAAO,0CAA2C,EACpD,CAAE,MAAO,8BAA+B,EACxC,CAAE,MAAO,8BAA+B,EAIxC,CAAE,MAAO,iBAAkB,CAC7B,EACA,UAAW,CACb,EAEMG,EAAQ,CACZ,UAAW,QACX,MAAO,SACP,IAAK,MACL,SAAUL,EACV,SAAU,CAAC,CACb,EACMM,EAAgB,CACpB,MAAO,QACP,IAAK,GACL,OAAQ,CACN,IAAK,IACL,UAAW,GACX,SAAU,CACRrB,EAAK,iBACLoB,CACF,EACA,YAAa,KACf,CACF,EACME,EAAe,CACnB,MAAO,OACP,IAAK,GACL,OAAQ,CACN,IAAK,IACL,UAAW,GACX,SAAU,CACRtB,EAAK,iBACLoB,CACF,EACA,YAAa,KACf,CACF,EACMG,EAAmB,CACvB,MAAO,OACP,IAAK,GACL,OAAQ,CACN,IAAK,IACL,UAAW,GACX,SAAU,CACRvB,EAAK,iBACLoB,CACF,EACA,YAAa,SACf,CACF,EACMI,EAAkB,CACtB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRxB,EAAK,iBACLoB,CACF,CACF,EAwCMK,EAAU,CACd,UAAW,UACX,SAAU,CAzCUzB,EAAK,QACzB,eACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CACE,MAAO,iBACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,MAAO,YACT,EACA,CACE,UAAW,OACX,MAAO,MACP,IAAK,MACL,WAAY,GACZ,aAAc,GACd,UAAW,CACb,EACA,CACE,UAAW,WACX,MAAOM,EAAa,gBACpB,WAAY,GACZ,UAAW,CACb,EAGA,CACE,MAAO,cACP,UAAW,CACb,CACF,CACF,CACF,CACF,CACF,EAKIN,EAAK,qBACLA,EAAK,mBACP,CACF,EACM0B,EAAkB,CACtB1B,EAAK,iBACLA,EAAK,kBACLqB,EACAC,EACAC,EACAC,EAEA,CAAE,MAAO,OAAQ,EACjBL,CAIF,EACAC,EAAM,SAAWM,EACd,OAAO,CAGN,MAAO,KACP,IAAK,KACL,SAAUX,EACV,SAAU,CACR,MACF,EAAE,OAAOW,CAAe,CAC1B,CAAC,EACH,IAAMC,EAAqB,CAAC,EAAE,OAAOF,EAASL,EAAM,QAAQ,EACtDQ,EAAkBD,EAAmB,OAAO,CAEhD,CACE,MAAO,KACP,IAAK,KACL,SAAUZ,EACV,SAAU,CAAC,MAAM,EAAE,OAAOY,CAAkB,CAC9C,CACF,CAAC,EACKE,EAAS,CACb,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUd,EACV,SAAUa,CACZ,EAGME,EAAmB,CACvB,SAAU,CAER,CACE,MAAO,CACL,QACA,MACAxB,EACA,MACA,UACA,MACAL,EAAM,OAAOK,EAAY,IAAKL,EAAM,OAAO,KAAMK,CAAU,EAAG,IAAI,CACpE,EACA,MAAO,CACL,EAAG,UACH,EAAG,cACH,EAAG,UACH,EAAG,uBACL,CACF,EAEA,CACE,MAAO,CACL,QACA,MACAA,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,aACL,CACF,CAEF,CACF,EAEMyB,EAAkB,CACtB,UAAW,EACX,MACA9B,EAAM,OAEJ,SAEA,iCAEA,6CAEA,kDAKF,EACA,UAAW,cACX,SAAU,CACR,EAAG,CAED,GAAGP,GACH,GAAGC,EACL,CACF,CACF,EAEMqC,EAAa,CACjB,MAAO,aACP,UAAW,OACX,UAAW,GACX,MAAO,8BACT,EAEMC,EAAsB,CAC1B,SAAU,CACR,CACE,MAAO,CACL,WACA,MACA3B,EACA,WACF,CACF,EAEA,CACE,MAAO,CACL,WACA,WACF,CACF,CACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,EACA,MAAO,WACP,SAAU,CAAEuB,CAAO,EACnB,QAAS,GACX,EAEMK,EAAsB,CAC1B,UAAW,EACX,MAAO,sBACP,UAAW,mBACb,EAEA,SAASC,GAAOC,EAAM,CACpB,OAAOnC,EAAM,OAAO,MAAOmC,EAAK,KAAK,GAAG,EAAG,GAAG,CAChD,CAEA,IAAMC,GAAgB,CACpB,MAAOpC,EAAM,OACX,KACAkC,GAAO,CACL,GAAGvC,GACH,QACA,QACF,CAAC,EACDU,EAAYL,EAAM,UAAU,IAAI,CAAC,EACnC,UAAW,iBACX,UAAW,CACb,EAEMqC,GAAkB,CACtB,MAAOrC,EAAM,OAAO,KAAMA,EAAM,UAC9BA,EAAM,OAAOK,EAAY,oBAAoB,CAC/C,CAAC,EACD,IAAKA,EACL,aAAc,GACd,SAAU,YACV,UAAW,WACX,UAAW,CACb,EAEMiC,GAAmB,CACvB,MAAO,CACL,UACA,MACAjC,EACA,QACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CACR,CACE,MAAO,MACT,EACAuB,CACF,CACF,EAEMW,GAAkB,2DAMbxC,EAAK,oBAAsB,UAEhCyC,EAAoB,CACxB,MAAO,CACL,gBAAiB,MACjBnC,EAAY,MACZ,OACA,cACAL,EAAM,UAAUuC,EAAe,CACjC,EACA,SAAU,QACV,UAAW,CACT,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CACRX,CACF,CACF,EAEA,MAAO,CACL,KAAM,aACN,QAAS,CAAC,KAAM,MAAO,MAAO,KAAK,EACnC,SAAUd,EAEV,QAAS,CAAE,gBAAAa,EAAiB,gBAAAG,CAAgB,EAC5C,QAAS,eACT,SAAU,CACR/B,EAAK,QAAQ,CACX,MAAO,UACP,OAAQ,OACR,UAAW,CACb,CAAC,EACDgC,EACAhC,EAAK,iBACLA,EAAK,kBACLqB,EACAC,EACAC,EACAC,EACAC,EAEA,CAAE,MAAO,OAAQ,EACjBN,EACAY,EACA,CACE,UAAW,OACX,MAAOzB,EAAaL,EAAM,UAAU,GAAG,EACvC,UAAW,CACb,EACAwC,EACA,CACE,MAAO,IAAMzC,EAAK,eAAiB,kCACnC,SAAU,oBACV,UAAW,EACX,SAAU,CACRyB,EACAzB,EAAK,YACL,CACE,UAAW,WAIX,MAAOwC,GACP,YAAa,GACb,IAAK,SACL,SAAU,CACR,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAOxC,EAAK,oBACZ,UAAW,CACb,EACA,CACE,UAAW,KACX,MAAO,UACP,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUe,EACV,SAAUa,CACZ,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,IACP,UAAW,CACb,EACA,CACE,MAAO,MACP,UAAW,CACb,EACA,CACE,SAAU,CACR,CAAE,MAAOrB,EAAS,MAAO,IAAKA,EAAS,GAAI,EAC3C,CAAE,MAAOC,CAAiB,EAC1B,CACE,MAAOC,EAAQ,MAGf,WAAYA,EAAQ,kBACpB,IAAKA,EAAQ,GACf,CACF,EACA,YAAa,MACb,SAAU,CACR,CACE,MAAOA,EAAQ,MACf,IAAKA,EAAQ,IACb,KAAM,GACN,SAAU,CAAC,MAAM,CACnB,CACF,CACF,CACF,CACF,EACAwB,EACA,CAGE,cAAe,2BACjB,EACA,CAIE,MAAO,kBAAoBjC,EAAK,oBAC9B,gEAOF,YAAY,GACZ,MAAO,WACP,SAAU,CACR6B,EACA7B,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAOM,EAAY,UAAW,gBAAiB,CAAC,CAClF,CACF,EAEA,CACE,MAAO,SACP,UAAW,CACb,EACAgC,GAIA,CACE,MAAO,MAAQhC,EACf,UAAW,CACb,EACA,CACE,MAAO,CAAE,wBAAyB,EAClC,UAAW,CAAE,EAAG,gBAAiB,EACjC,SAAU,CAAEuB,CAAO,CACrB,EACAQ,GACAH,EACAJ,EACAS,GACA,CACE,MAAO,QACT,CACF,CACF,CACF,CCnvBA,SAASG,GAAKC,EAAM,CAClB,IAAMC,EAAY,CAChB,UAAW,OACX,MAAO,8BACP,UAAW,IACb,EACMC,EAAc,CAClB,MAAO,YACP,UAAW,cACX,UAAW,CACb,EACMC,EAAW,CACf,OACA,QACA,MACF,EAMMC,EAAgB,CACpB,MAAO,UACP,cAAeD,EAAS,KAAK,GAAG,CAClC,EAEA,MAAO,CACL,KAAM,OACN,SAAS,CACP,QAASA,CACX,EACA,SAAU,CACRF,EACAC,EACAF,EAAK,kBACLI,EACAJ,EAAK,cACLA,EAAK,oBACLA,EAAK,oBACP,EACA,QAAS,KACX,CACF,CCjDA,IAAIK,GAAgB,kBAChBC,GAAO,OAAOD,EAAa,IAC3BE,GAAY,8BACZC,GAAU,CACZ,UAAW,SACX,SAAU,CAGR,CAAE,MAAO,QAAQH,EAAa,MAAMC,EAAI,YAAYA,EAAI,eACzCD,EAAa,aAAc,EAE1C,CAAE,MAAO,OAAOA,EAAa,MAAMC,EAAI,8BAA+B,EACtE,CAAE,MAAO,IAAIA,EAAI,aAAc,EAC/B,CAAE,MAAO,OAAOD,EAAa,YAAa,EAG1C,CAAE,MAAO,aAAaE,EAAS,UAAUA,EAAS,SAASA,EAAS,eACrDF,EAAa,aAAc,EAG1C,CAAE,MAAO,gCAAiC,EAG1C,CAAE,MAAO,YAAYE,EAAS,WAAY,EAG1C,CAAE,MAAO,wBAAyB,EAGlC,CAAE,MAAO,+BAAgC,CAC3C,EACA,UAAW,CACb,EAWA,SAASE,GAAOC,EAAM,CACpB,IAAMC,EAAW,CACf,QACE,wYAKF,SACE,kEACF,QACE,iBACJ,EACMC,EAAsB,CAC1B,UAAW,UACX,MAAO,mCACP,OAAQ,CAAE,SAAU,CAClB,CACE,UAAW,SACX,MAAO,MACT,CACF,CAAE,CACJ,EACMC,EAAQ,CACZ,UAAW,SACX,MAAOH,EAAK,oBAAsB,GACpC,EAGMI,EAAQ,CACZ,UAAW,QACX,MAAO,OACP,IAAK,KACL,SAAU,CAAEJ,EAAK,aAAc,CACjC,EACMK,EAAW,CACf,UAAW,WACX,MAAO,MAAQL,EAAK,mBACtB,EACMM,EAAS,CACb,UAAW,SACX,SAAU,CACR,CACE,MAAO,MACP,IAAK,cACL,SAAU,CACRD,EACAD,CACF,CACF,EAIA,CACE,MAAO,IACP,IAAK,IACL,QAAS,KACT,SAAU,CAAEJ,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,IACP,IAAK,IACL,QAAS,KACT,SAAU,CACRA,EAAK,iBACLK,EACAD,CACF,CACF,CACF,CACF,EACAA,EAAM,SAAS,KAAKE,CAAM,EAE1B,IAAMC,EAAsB,CAC1B,UAAW,OACX,MAAO,gFAAkFP,EAAK,oBAAsB,IACtH,EACMQ,EAAa,CACjB,UAAW,OACX,MAAO,IAAMR,EAAK,oBAClB,SAAU,CACR,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACRA,EAAK,QAAQM,EAAQ,CAAE,UAAW,QAAS,CAAC,EAC5C,MACF,CACF,CACF,CACF,EAKMG,EAAqBX,GACrBY,EAAwBV,EAAK,QACjC,OAAQ,OACR,CAAE,SAAU,CAAEA,EAAK,oBAAqB,CAAE,CAC5C,EACMW,EAAoB,CAAE,SAAU,CACpC,CACE,UAAW,OACX,MAAOX,EAAK,mBACd,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAC,CACb,CACF,CAAE,EACIY,EAAqBD,EAC3B,OAAAC,EAAmB,SAAS,CAAC,EAAE,SAAW,CAAED,CAAkB,EAC9DA,EAAkB,SAAS,CAAC,EAAE,SAAW,CAAEC,CAAmB,EAEvD,CACL,KAAM,SACN,QAAS,CACP,KACA,KACF,EACA,SAAUX,EACV,SAAU,CACRD,EAAK,QACH,UACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,MAAO,YACT,CACF,CACF,CACF,EACAA,EAAK,oBACLU,EACAR,EACAC,EACAI,EACAC,EACA,CACE,UAAW,WACX,cAAe,MACf,IAAK,QACL,YAAa,GACb,WAAY,GACZ,SAAUP,EACV,UAAW,EACX,SAAU,CACR,CACE,MAAOD,EAAK,oBAAsB,UAClC,YAAa,GACb,UAAW,EACX,SAAU,CAAEA,EAAK,qBAAsB,CACzC,EACA,CACE,UAAW,OACX,MAAO,IACP,IAAK,IACL,SAAU,UACV,UAAW,CACb,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,WAAY,GACZ,SAAUC,EACV,UAAW,EACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,SACL,eAAgB,GAChB,SAAU,CACRU,EACAX,EAAK,oBACLU,CACF,EACA,UAAW,CACb,EACAV,EAAK,oBACLU,EACAH,EACAC,EACAF,EACAN,EAAK,aACP,CACF,EACAU,CACF,CACF,EACA,CACE,MAAO,CACL,wBACA,MACAV,EAAK,mBACP,EACA,WAAY,CACV,EAAG,aACL,EACA,SAAU,wBACV,IAAK,WACL,WAAY,GACZ,QAAS,qBACT,SAAU,CACR,CAAE,cAAe,+CAAgD,EACjEA,EAAK,sBACL,CACE,UAAW,OACX,MAAO,IACP,IAAK,IACL,aAAc,GACd,WAAY,GACZ,UAAW,CACb,EACA,CACE,UAAW,OACX,MAAO,UACP,IAAK,eACL,aAAc,GACd,UAAW,EACb,EACAO,EACAC,CACF,CACF,EACAF,EACA,CACE,UAAW,OACX,MAAO,kBACP,IAAK,IACL,QAAS;AAAA,CACX,EACAG,CACF,CACF,CACF,CC3RA,IAAMI,GAASC,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACT,EACA,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACT,EACA,kBAAmB,CACjB,UAAW,WACX,MAAO,cACT,EACA,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,iBACP,CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGIC,GAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEMC,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMC,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMC,GAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,EAGJC,GAAmBH,GAAe,OAAOC,EAAe,EAY9D,SAASG,GAAKP,EAAM,CAClB,IAAMQ,EAAQT,GAAMC,CAAI,EAC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AS,2HAEX,EACA,SAAU,CACRD,EAAK,kBACLC,EACAC,EACAC,EACAC,EACAC,EACAC,CACF,CACF,CACF,CC3EA,SAASC,GAASC,EAAM,CACtB,IAAMC,EAAQD,EAAK,MACbE,EAAc,CAClB,MAAO,gBACP,IAAK,IACL,YAAa,MACb,UAAW,CACb,EACMC,EAAkB,CACtB,MAAO,cACP,IAAK,GACP,EACMC,EAAO,CACX,UAAW,OACX,SAAU,CAER,CAAE,MAAO,+BAAgC,EACzC,CAAE,MAAO,+BAAgC,EAEzC,CACE,MAAO,MACP,IAAK,WACP,EACA,CACE,MAAO,MACP,IAAK,WACP,EACA,CAAE,MAAO,OAAQ,EACjB,CACE,MAAO,kBAGP,SAAU,CACR,CACE,MAAO,cACP,IAAK,QACP,CACF,EACA,UAAW,CACb,CACF,CACF,EACMC,EAAO,CACX,UAAW,SACX,MAAO,kCACP,IAAK,OACL,WAAY,EACd,EACMC,EAAiB,CACrB,MAAO,eACP,YAAa,GACb,SAAU,CACR,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,EACd,EACA,CACE,UAAW,OACX,MAAO,OACP,IAAK,IACL,aAAc,EAChB,CACF,CACF,EACMC,EAAa,0BACbC,EAAO,CACX,SAAU,CAGR,CACE,MAAO,iBACP,UAAW,CACb,EAEA,CACE,MAAO,gEACP,UAAW,CACb,EACA,CACE,MAAOP,EAAM,OAAO,YAAaM,EAAY,YAAY,EACzD,UAAW,CACb,EAEA,CACE,MAAO,wBACP,UAAW,CACb,EAEA,CACE,MAAO,iBACP,UAAW,CACb,CACF,EACA,YAAa,GACb,SAAU,CACR,CAEE,MAAO,UAAW,EACpB,CACE,UAAW,SACX,UAAW,EACX,MAAO,MACP,IAAK,MACL,aAAc,GACd,UAAW,EACb,EACA,CACE,UAAW,OACX,UAAW,EACX,MAAO,SACP,IAAK,MACL,aAAc,GACd,WAAY,EACd,EACA,CACE,UAAW,SACX,UAAW,EACX,MAAO,SACP,IAAK,MACL,aAAc,GACd,WAAY,EACd,CACF,CACF,EACME,EAAO,CACX,UAAW,SACX,SAAU,CAAC,EACX,SAAU,CACR,CACE,MAAO,aACP,IAAK,MACP,EACA,CACE,MAAO,cACP,IAAK,OACP,CACF,CACF,EACMC,EAAS,CACb,UAAW,WACX,SAAU,CAAC,EACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,aACP,IAAK,IACL,UAAW,CACb,CACF,CACF,EAKMC,EAAsBX,EAAK,QAAQS,EAAM,CAAE,SAAU,CAAC,CAAE,CAAC,EACzDG,EAAsBZ,EAAK,QAAQU,EAAQ,CAAE,SAAU,CAAC,CAAE,CAAC,EACjED,EAAK,SAAS,KAAKG,CAAmB,EACtCF,EAAO,SAAS,KAAKC,CAAmB,EAExC,IAAIE,EAAc,CAChBX,EACAM,CACF,EAEA,OACEC,EACAC,EACAC,EACAC,CACF,EAAE,QAAQE,GAAK,CACbA,EAAE,SAAWA,EAAE,SAAS,OAAOD,CAAW,CAC5C,CAAC,EAEDA,EAAcA,EAAY,OAAOJ,EAAMC,CAAM,EA+BtC,CACL,KAAM,WACN,QAAS,CACP,KACA,SACA,KACF,EACA,SAAU,CApCG,CACb,UAAW,UACX,SAAU,CACR,CACE,MAAO,UACP,IAAK,IACL,SAAUG,CACZ,EACA,CACE,MAAO,uBACP,SAAU,CACR,CAAE,MAAO,SAAU,EACnB,CACE,MAAO,IACP,IAAK,MACL,SAAUA,CACZ,CACF,CACF,CACF,CACF,EAkBIX,EACAG,EACAI,EACAC,EAnBe,CACjB,UAAW,QACX,MAAO,SACP,SAAUG,EACV,IAAK,GACP,EAgBIT,EACAD,EACAK,EACAF,CACF,CACF,CACF,CCtOA,SAASS,GAAWC,EAAM,CACxB,IAAMC,EAAY,CAChB,UAAW,WACX,MAAO,sEACT,EACMC,EAAgB,yBAuJhBC,EAAW,CACf,oBAAqB,CACnB,OACA,OACF,EACA,SAAUD,EACV,QA3IU,CACV,QACA,SACA,SACA,UACA,QACA,SACA,MACA,QACA,WACA,SACA,UACA,KACA,KACA,SACA,OACA,OACA,OACA,QACA,SACA,MACA,OACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,WACA,SACA,YACA,OACA,gBACA,KACA,SACA,YACA,WACA,WACA,SACA,OACA,OACA,KACA,MACA,QACA,SACA,QACA,SACA,WACA,SACA,UACA,kBACA,WACA,aACA,UACA,OACA,YACA,OACA,SACA,SACA,WACA,mBACA,cACA,WACA,YACA,YACA,YACA,UACA,WACA,UACA,QACA,uBACA,WACA,oBACA,oBACA,kBACA,cACA,kBACA,WACA,WACA,YACA,oBACA,eACA,sBACA,gBACA,SACA,SACA,SACA,oBACA,UACA,WACA,mBACA,kBACA,QACA,eACA,4BACA,iBACA,oBACA,2BACA,YACA,eACA,gBACA,UACA,aACA,uBACA,0BACA,wBACA,uBACA,gBACA,mBACA,YACA,aACA,gBACA,iBACA,eACF,EAyBE,QAxBe,CACf,QACA,OACA,QACA,OACA,MACA,MACA,KACA,MACF,EAgBE,SAfgB,CAChB,kBACA,mBACA,gBACA,iBACA,eACF,EAUE,KA/JY,CACZ,MACA,QACA,OACA,WACA,SACA,QACA,OACA,SACA,UACA,UACA,OACA,OACA,OACA,OACA,OACF,CAgJA,EACME,EAAiB,CACrB,SAAUF,EACV,QAAS,CACP,aACA,SACA,YACA,iBACF,CACF,EACA,MAAO,CACL,KAAM,cACN,QAAS,CACP,KACA,OACA,QACA,UACA,eACF,EACA,SAAUC,EACV,QAAS,KACT,SAAU,CACRF,EACAD,EAAK,oBACLA,EAAK,qBACLA,EAAK,cACLA,EAAK,kBACLA,EAAK,iBACL,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAO,KACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEA,EAAK,gBAAiB,CACpC,CACF,CACF,EACA,CACE,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,gFACgC,EACpC,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAA,EAAK,QAAQA,EAAK,kBAAmB,CAAE,UAAW,QAAS,CAAC,EAC5D,CACE,UAAW,SACX,MAAO,QACP,IAAK,IACL,QAAS,KACX,EACAA,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CACE,UAAW,QACX,MAAO,IAAMI,EAAe,QAAQ,KAAK,GAAG,EAAI,OAChD,IAAK,SACL,WAAY,GACZ,SAAUA,EACV,SAAU,CAAEJ,EAAK,qBAAsB,CACzC,EACA,CACE,MAAO,MAAQA,EAAK,oBACpB,UAAW,CACb,CACF,CACF,CACF,CClPA,SAASK,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAW,CACf,MACA,SACA,QACA,MACA,QACA,OACA,UACA,QACA,QACA,SACA,QACA,QACA,QACA,OACA,QACA,MACA,SACA,QACA,WACA,UACA,WACA,MACA,QACA,WACA,UACA,UACA,SACA,MACA,KACA,OACA,OACA,OACA,QACA,WACA,aACA,YACA,cACA,WACA,aACA,MACA,OACA,OACA,SACA,OACA,MACA,QACA,SACA,QACA,MACA,UACA,OACA,SACA,WACA,OACA,WACA,WACA,WACA,gBACA,gBACA,aACA,WACA,eACA,eACA,YACA,cACA,UACA,cACA,iBACA,mBACA,cACA,WACA,WACA,WACA,gBACA,gBACA,aACA,cACA,aACA,QACA,OACA,SACA,OACA,OACA,KACA,MACA,KACA,QACA,MACA,QACA,OACA,OACA,OACA,OACA,KACA,UACA,SACA,OACA,SACA,QACA,YACA,MACA,QACA,KACA,KACA,MACA,QACA,SACA,SACA,SACA,SACA,KACA,KACA,OACA,KACA,MACA,MACA,OACA,UACA,KACA,MACA,MACA,OACA,UACA,OACA,MACA,MACA,QACA,SACA,YACA,OACA,MACA,KACA,YACA,KACA,KACA,OACA,OACA,UACA,WACA,WACA,WACA,OACA,OACA,MACA,SACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,MACA,SACA,OACA,UACA,SACA,SACA,SACA,QACA,OACA,WACA,aACA,YACA,UACA,cACA,cACA,WACA,aACA,aACA,QACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,SACA,aACA,OACA,SACA,QACA,UACA,OACA,QACA,OACA,QACA,QACA,MACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,OACA,UACA,MACA,OACA,OACA,QACA,KACA,WACA,KACA,UACA,QACA,QACA,SACA,SACA,SACA,UACA,QACA,QACA,MACA,QACA,SACA,MACA,OACA,UACA,YACA,OACA,OACA,QACA,QACA,MACA,MACA,KACF,EAGMC,EAAkB,uBAClBC,EAAgB,CACpB,SAAU,SACV,QAASF,EAAS,KAAK,GAAG,CAC5B,EACMG,EAAQ,CACZ,UAAW,QACX,MAAO,UACP,IAAK,MACL,SAAUD,CACZ,EACME,EAAS,CACb,MAAO,OACP,IAAK,IAEP,EACMC,EAAM,CAAE,SAAU,CACtB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAON,EAAM,OACb,iDAGA,uBACF,CAAE,EACF,CACE,MAAO,gBACP,UAAW,CACb,CACF,CAAE,EACIO,EAAkB,CACtBR,EAAK,iBACLK,EACAE,CACF,EACME,EAAe,CACnB,IACA,KACA,KACA,KACA,IACA,IACA,GACF,EAMMC,EAAmB,CAACC,EAAQC,EAAMC,EAAQ,QAAU,CACxD,IAAMC,EAAUD,IAAU,MACtBA,EACAZ,EAAM,OAAOY,EAAOD,CAAI,EAC5B,OAAOX,EAAM,OACXA,EAAM,OAAO,MAAOU,EAAQ,GAAG,EAC/BC,EACA,oBACAE,EACA,oBACAD,EACAV,CACF,CACF,EAMMY,EAAY,CAACJ,EAAQC,EAAMC,IACxBZ,EAAM,OACXA,EAAM,OAAO,MAAOU,EAAQ,GAAG,EAC/BC,EACA,oBACAC,EACAV,CACF,EAEIa,EAAwB,CAC5BT,EACAP,EAAK,kBACLA,EAAK,QACH,OACA,OACA,CAAE,eAAgB,EAAK,CACzB,EACAM,EACA,CACE,UAAW,SACX,SAAUE,EACV,SAAU,CACR,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,gBACP,IAAK,IACL,U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A,OACA,MACF,EACMC,EAAM,CAGV,YACA,UACA,WACA,eACA,2BACA,WACA,aACA,gBACA,YAGA,MACA,OACA,OACA,UACA,eACA,QACA,UACA,eAMA,QACA,WACA,MACA,KACA,SACA,OACA,UACA,QACA,WACA,OACA,QACA,QACA,QACA,QACA,WACA,UACA,UACA,KACA,SACA,OACA,SACA,QACA,aACA,SACA,aACA,QACA,YACA,WACA,OACA,OACA,UACA,QACA,UACA,QACA,MACA,UACA,OACA,SACA,OACA,KACA,aACA,aACA,YACA,MACA,UACA,YACA,QACA,WACA,OACA,UACA,QACA,MACA,QACA,SACA,KACA,UACA,YACA,SACA,WACA,OACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,MACA,OACA,QACA,MACA,OACF,EAEMC,EAAY,CAGhB,UACA,iBACA,qBACA,kBACA,gBACA,cACA,iBACA,2BACA,yBACA,kBACA,yBACA,eACA,YACA,oBACA,sBACA,kBACA,gBACA,iBACA,YACA,qBACA,iBACA,eACA,mBACA,2BACA,mBACA,kBACA,gBACA,iBACA,mBACA,mBACA,uBACA,sBACA,gBACA,oBACA,iBACA,aACA,iBACA,yBACA,2BACA,kCACA,6BACA,0BACA,oBACA,4BACA,yBACA,wBACA,gBACA,mBACA,mBACA,sBACA,cACA,gBACA,gBACA,UACA,aACA,aACA,mBACA,cACA,mBACA,WACA,WACA,aACA,oBACA,YACA,qBACA,2BACA,sBAGA,cACA,aACA,UACA,QACA,YACA,WACA,oBACA,eACA,aACA,YACA,cACA,WACA,gBACA,UAGA,YACA,yBACA,SACA,kBACA,OACA,SACA,UACF,EAsBMC,EAAW,CACf,QAASF,EACT,SAhBgBG,IAAU,CAE1B,IAAMC,GAAS,CAAC,EAChB,OAAAD,GAAM,QAAQE,IAAQ,CACpBD,GAAO,KAAKC,EAAI,EACZA,GAAK,YAAY,IAAMA,GACzBD,GAAO,KAAKC,GAAK,YAAY,CAAC,EAE9BD,GAAO,KAAKC,GAAK,YAAY,CAAC,CAElC,CAAC,EACMD,EACT,GAIoBL,CAAQ,EAC1B,SAAUE,CACZ,EAIMK,EAAqBH,IAClBA,GAAM,IAAIE,IACRA,GAAK,QAAQ,SAAU,EAAE,CACjC,EAGGE,EAAmB,CAAE,SAAU,CACnC,CACE,MAAO,CACL,MACAxB,EAAM,OAAOa,EAAY,GAAG,EAE5Bb,EAAM,OAAO,MAAOuB,EAAkBL,CAAS,EAAE,KAAK,MAAM,EAAG,MAAM,EACrEf,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAE,EAEIsB,EAAqBzB,EAAM,OAAOE,EAAU,YAAY,EAExDwB,EAAsC,CAAE,SAAU,CACtD,CACE,MAAO,CACL1B,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC/B,EACAyB,CACF,EACA,MAAO,CAAE,EAAG,mBAAqB,CACnC,EACA,CACE,MAAO,CACL,KACA,OACF,EACA,MAAO,CAAE,EAAG,mBAAqB,CACnC,EACA,CACE,MAAO,CACLtB,EACAH,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC/B,EACAyB,CACF,EACA,MAAO,CACL,EAAG,cACH,EAAG,mBACL,CACF,EACA,CACE,MAAO,CACLtB,EACAH,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC/B,CACF,EACA,MAAO,CAAE,EAAG,aAAe,CAC7B,EACA,CACE,MAAO,CACLG,EACA,KACA,OACF,EACA,MAAO,CACL,EAAG,cACH,EAAG,mBACL,CACF,CACF,CAAE,EAEIwB,EAAiB,CACrB,MAAO,OACP,MAAO3B,EAAM,OAAOE,EAAUF,EAAM,UAAU,GAAG,EAAGA,EAAM,UAAU,QAAQ,CAAC,CAC/E,EACM4B,EAAc,CAClB,UAAW,EACX,MAAO,KACP,IAAK,KACL,SAAUT,EACV,SAAU,CACRQ,EACAvB,EACAsB,EACA3B,EAAK,qBACLe,EACAC,EACAS,CACF,CACF,EACMK,EAAkB,CACtB,UAAW,EACX,MAAO,CACL,KAEA7B,EAAM,OAAO,wBAAyBuB,EAAkBN,CAAG,EAAE,KAAK,MAAM,EAAG,IAAKM,EAAkBL,CAAS,EAAE,KAAK,MAAM,EAAG,MAAM,EACjIhB,EACAF,EAAM,OAAOa,EAAY,GAAG,EAC5Bb,EAAM,UAAU,QAAQ,CAC1B,EACA,MAAO,CAAE,EAAG,uBAAyB,EACrC,SAAU,CAAE4B,CAAY,CAC1B,EACAA,EAAY,SAAS,KAAKC,CAAe,EAEzC,IAAMC,EAAqB,CACzBH,EACAD,EACA3B,EAAK,qBACLe,EACAC,EACAS,CACF,EAEMO,GAAa,CACjB,MAAO/B,EAAM,OAAO,SAAUG,CAAyB,EACvD,WAAY,OACZ,IAAK,IACL,SAAU,OACV,SAAU,CACR,QAASa,EACT,QAAS,CACP,MACA,OACF,CACF,EACA,SAAU,CACR,CACE,MAAO,KACP,IAAK,IACL,SAAU,CACR,QAASA,EACT,QAAS,CACP,MACA,OACF,CACF,EACA,SAAU,CACR,OACA,GAAGc,CACL,CACF,EACA,GAAGA,EACH,CACE,MAAO,OACP,MAAO3B,CACT,CACF,CACF,EAEA,MAAO,CACL,iBAAkB,GAClB,SAAUgB,EACV,SAAU,CACRY,GACAhC,EAAK,kBACLA,EAAK,QAAQ,KAAM,GAAG,EACtBA,EAAK,QACH,OACA,OACA,CAAE,SAAU,CACV,CACE,MAAO,SACP,MAAO,YACT,CACF,CAAE,CACJ,EACA,CACE,MAAO,uBACP,SAAU,kBACV,OAAQ,CACN,MAAO,UACP,IAAKA,EAAK,iBACV,SAAU,CACR,CACE,MAAO,MACP,MAAO,OACP,WAAY,EACd,CACF,CACF,CACF,EACAM,EACA,CACE,MAAO,oBACP,MAAO,UACT,EACAD,EACAyB,EACAH,EACA,CACE,MAAO,CACL,QACA,KACAxB,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,mBACL,CACF,EACAsB,EACA,CACE,MAAO,WACP,UAAW,EACX,cAAe,cACf,IAAK,OACL,WAAY,GACZ,QAAS,UACT,SAAU,CACR,CAAE,cAAe,KAAO,EACxBzB,EAAK,sBACL,CACE,MAAO,KACP,WAAY,EACd,EACA,CACE,MAAO,SACP,MAAO,MACP,IAAK,MACL,aAAc,GACd,WAAY,GACZ,SAAUoB,EACV,SAAU,CACR,OACAf,EACAsB,EACA3B,EAAK,qBACLe,EACAC,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,QACP,SAAU,CACR,CACE,cAAe,OACf,QAAS,OACX,EACA,CACE,cAAe,wBACf,QAAS,QACX,CACF,EACA,UAAW,EACX,IAAK,KACL,WAAY,GACZ,SAAU,CACR,CAAE,cAAe,oBAAqB,EACtChB,EAAK,qBACP,CACF,EAIA,CACE,cAAe,YACf,UAAW,EACX,IAAK,IACL,QAAS,OACT,SAAU,CAAEA,EAAK,QAAQA,EAAK,sBAAuB,CAAE,MAAO,aAAc,CAAC,CAAE,CACjF,EACA,CACE,cAAe,MACf,UAAW,EACX,IAAK,IACL,SAAU,CAER,CACE,MAAO,0BACP,MAAO,SACT,EAEAA,EAAK,qBACP,CACF,EACAe,EACAC,CACF,CACF,CACF,CC1lBA,SAASiB,GAAYC,EAAM,CACzB,MAAO,CACL,KAAM,eACN,YAAa,MACb,SAAU,CACR,CACE,MAAO,cACP,IAAK,MACL,YAAa,MACb,SAAU,CAGR,CACE,MAAO,OACP,IAAK,OACL,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACR,EACAA,EAAK,QAAQA,EAAK,iBAAkB,CAClC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EACR,CAAC,EACDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EACR,CAAC,CACH,CACF,CACF,CACF,CACF,CC5CA,SAASC,GAAUC,EAAM,CACvB,MAAO,CACL,KAAM,aACN,QAAS,CACP,OACA,KACF,EACA,kBAAmB,EACrB,CACF,CCTA,SAASC,GAAOC,EAAM,CACpB,IAAMC,EAAQD,EAAK,MACbE,EAAW,qCACXC,EAAiB,CACrB,MACA,KACA,SACA,QACA,QACA,QACA,OACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,QACA,cACA,MACA,KACA,OACA,QACA,SACA,MACA,QACA,OACA,OACF,EAsGMC,EAAW,CACf,SAAU,sBACV,QAASD,EACT,SAvGgB,CAChB,aACA,MACA,MACA,MACA,QACA,MACA,OACA,aACA,YACA,QACA,WACA,MACA,cACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,OACA,SACA,QACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,MACA,KACA,QACA,MACA,aACA,aACA,OACA,MACA,OACA,SACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,QACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,OACA,KACF,EAkCE,QAhCe,CACf,YACA,WACA,QACA,OACA,iBACA,MACF,EA0BE,KArBY,CACZ,MACA,WACA,YACA,OACA,OACA,UACA,UACA,WACA,WACA,MACA,QACA,OACA,OACF,CAQA,EAEME,EAAS,CACb,UAAW,OACX,MAAO,gBACT,EAEMC,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUF,EACV,QAAS,GACX,EAEMG,EAAkB,CACtB,MAAO,OACP,UAAW,CACb,EAEMC,EAAS,CACb,UAAW,SACX,SAAU,CAAER,EAAK,gBAAiB,EAClC,SAAU,CACR,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRA,EAAK,iBACLK,CACF,EACA,UAAW,EACb,EACA,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRL,EAAK,iBACLK,CACF,EACA,UAAW,EACb,EACA,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACRL,EAAK,iBACLK,EACAE,EACAD,CACF,CACF,EACA,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACRN,EAAK,iBACLK,EACAE,EACAD,CACF,CACF,EACA,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACb,EACA,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACb,EACA,CACE,MAAO,4BACP,IAAK,GACP,EACA,CACE,MAAO,4BACP,IAAK,GACP,EACA,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLO,EACAD,CACF,CACF,EACA,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLO,EACAD,CACF,CACF,EACAN,EAAK,iBACLA,EAAK,iBACP,CACF,EAGMS,EAAY,kBACZC,EAAa,QAAQD,CAAS,UAAUA,CAAS,SAASA,CAAS,OAMnEE,EAAY,OAAOR,EAAe,KAAK,GAAG,CAAC,GAC3CS,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAWR,CACE,MAAO,QAAQH,CAAS,MAAMC,CAAU,eAAeD,CAAS,YAAYE,CAAS,GACvF,EACA,CACE,MAAO,IAAID,CAAU,QACvB,EAQA,CACE,MAAO,0CAA0CC,CAAS,GAC5D,EACA,CACE,MAAO,4BAA4BA,CAAS,GAC9C,EACA,CACE,MAAO,6BAA6BA,CAAS,GAC/C,EACA,CACE,MAAO,mCAAmCA,CAAS,GACrD,EAIA,CACE,MAAO,OAAOF,CAAS,WAAWE,CAAS,GAC7C,CACF,CACF,EACME,EAAe,CACnB,UAAW,UACX,MAAOZ,EAAM,UAAU,SAAS,EAChC,IAAK,IACL,SAAUG,EACV,SAAU,CACR,CACE,MAAO,SACT,EAEA,CACE,MAAO,IACP,IAAK,OACL,eAAgB,EAClB,CACF,CACF,EACMU,EAAS,CACb,UAAW,SACX,SAAU,CAER,CACE,UAAW,GACX,MAAO,UACP,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUV,EACV,SAAU,CACR,OACAC,EACAO,EACAJ,EACAR,EAAK,iBACP,CACF,CACF,CACF,EACA,OAAAM,EAAM,SAAW,CACfE,EACAI,EACAP,CACF,EAEO,CACL,KAAM,SACN,QAAS,CACP,KACA,MACA,SACF,EACA,aAAc,GACd,SAAUD,EACV,QAAS,cACT,SAAU,CACRC,EACAO,EACA,CAEE,MAAO,UACT,EACA,CAGE,cAAe,KACf,UAAW,CACb,EACAJ,EACAK,EACAb,EAAK,kBACL,CACE,MAAO,CACL,QAAS,MACTE,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CAAEY,CAAO,CACrB,EACA,CACE,SAAU,CACR,CACE,MAAO,CACL,UAAW,MACXZ,EAAU,MACV,QAASA,EAAS,OACpB,CACF,EACA,CACE,MAAO,CACL,UAAW,MACXA,CACF,CACF,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,cACH,EAAG,uBACL,CACF,EACA,CACE,UAAW,OACX,MAAO,WACP,IAAK,UACL,SAAU,CACRU,EACAE,EACAN,CACF,CACF,CACF,CACF,CACF,CCxaA,SAASO,GAAWC,EAAM,CACxB,MAAO,CACL,QAAS,CAAE,OAAQ,EACnB,SAAU,CACR,CACE,UAAW,cACX,OAAQ,CAGN,IAAK,MACL,OAAQ,CACN,IAAK,IACL,YAAa,QACf,CACF,EACA,SAAU,CACR,CAAE,MAAO,eAAgB,EACzB,CAAE,MAAO,kBAAmB,CAC9B,CACF,CACF,CACF,CACF,CCnBA,SAASC,GAAEC,EAAM,CACf,IAAMC,EAAQD,EAAK,MAObE,EAAW,uDACXC,EAAkBF,EAAM,OAE5B,gDAEA,0CAEA,+CACF,EACMG,EAAe,mEACfC,EAAiBJ,EAAM,OAC3B,OACA,OACA,OACA,QACA,KACA,GACF,EAEA,MAAO,CACL,KAAM,IAEN,SAAU,CACR,SAAUC,EACV,QACE,kDACF,QACE,wFAEF,SAEE,ghCAqBJ,EAEA,SAAU,CAERF,EAAK,QACH,KACA,IACA,CAAE,SAAU,CACV,CAME,MAAO,SACP,MAAO,YACP,OAAQ,CACN,IAAKC,EAAM,UAAUA,EAAM,OAEzB,yBAEA,WACF,CAAC,EACD,WAAY,EACd,CACF,EACA,CAGE,MAAO,SACP,MAAO,SACP,IAAK,IACL,SAAU,CACR,CACE,MAAO,WACP,SAAU,CACR,CAAE,MAAOC,CAAS,EAClB,CAAE,MAAO,mBAAoB,CAC/B,EACA,WAAY,EACd,CACF,CACF,EACA,CACE,MAAO,SACP,MAAO,YACT,EACA,CACE,MAAO,UACP,MAAO,aACT,CACF,CAAE,CACJ,EAEAF,EAAK,kBAEL,CACE,MAAO,SACP,SAAU,CAAEA,EAAK,gBAAiB,EAClC,SAAU,CACRA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACD,CACE,MAAO,IACP,IAAK,IACL,UAAW,CACb,EACA,CACE,MAAO,IACP,IAAK,IACL,UAAW,CACb,CACF,CACF,EAWA,CACE,UAAW,EACX,SAAU,CACR,CACE,MAAO,CACL,EAAG,WACH,EAAG,QACL,EACA,MAAO,CACLI,EACAD,CACF,CACF,EACA,CACE,MAAO,CACL,EAAG,WACH,EAAG,QACL,EACA,MAAO,CACL,UACAA,CACF,CACF,EACA,CACE,MAAO,CACL,EAAG,cACH,EAAG,QACL,EACA,MAAO,CACLE,EACAF,CACF,CACF,EACA,CACE,MAAO,CAAE,EAAG,QAAS,EACrB,MAAO,CACL,mBACAA,CACF,CACF,CACF,CACF,EAGA,CAEE,MAAO,CAAE,EAAG,UAAW,EACvB,MAAO,CACLD,EACA,MACA,KACA,KACF,CACF,EAEA,CACE,MAAO,WACP,UAAW,EACX,SAAU,CACR,CAAE,MAAOE,CAAa,EACtB,CAAE,MAAO,SAAU,CACrB,CACF,EAEA,CACE,MAAO,cACP,UAAW,EACX,MAAOC,CACT,EAEA,CAEE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,KAAM,CAAE,CAC/B,CACF,CACF,CACF,CCrPA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAiB,qFAEjBC,EAAgBF,EAAM,OAC1B,uBAEA,4BACF,EAEMG,EAA+BH,EAAM,OAAOE,EAAe,UAAU,EAarEE,EAAgB,CACpB,oBAAqB,CACnB,WACA,WACA,cACF,EACA,oBAAqB,CACnB,OACA,OACF,EACA,QAAS,CACP,QACA,MACA,QACA,QACA,QACA,OACA,QACA,UACA,KACA,OACA,QACA,MACA,MACA,SACA,MACA,KACA,KACA,SACA,OACA,MACA,KACA,OACA,UACA,SACA,QACA,SACA,OACA,QACA,SACA,QACA,OACA,QACA,QACA,GAtDe,CACjB,UACA,SACA,UACA,SACA,UACA,YACA,QACA,OACF,CA8CE,EACA,SAAU,CACR,OACA,SACA,gBACA,cACA,cACA,gBACA,mBACA,iBACF,EACA,QAAS,CACP,OACA,QACA,KACF,CACF,EACMC,EAAY,CAChB,UAAW,SACX,MAAO,YACT,EACMC,EAAa,CACjB,MAAO,KACP,IAAK,GACP,EACMC,EAAgB,CACpBR,EAAK,QACH,IACA,IACA,CAAE,SAAU,CAAEM,CAAU,CAAE,CAC5B,EACAN,EAAK,QACH,UACA,QACA,CACE,SAAU,CAAEM,CAAU,EACtB,UAAW,EACb,CACF,EACAN,EAAK,QAAQ,WAAYA,EAAK,gBAAgB,CAChD,EACMS,EAAQ,CACZ,UAAW,QACX,MAAO,MACP,IAAK,KACL,SAAUJ,CACZ,EACMK,EAAS,CACb,UAAW,SACX,SAAU,CACRV,EAAK,iBACLS,CACF,EACA,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,aACP,IAAK,GACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,aACP,IAAK,GACP,EACA,CACE,MAAO,aACP,IAAK,GACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EAGA,CAAE,MAAO,iBAAkB,EAC3B,CAAE,MAAO,2BAA4B,EACrC,CAAE,MAAO,iCAAkC,EAC3C,CAAE,MAAO,yDAA0D,EACnE,CAAE,MAAO,yBAA0B,EACnC,CAAE,MAAO,WAAY,EAErB,CAGE,MAAOR,EAAM,OACX,YACAA,EAAM,UAAU,0CAA0C,CAC5D,EACA,SAAU,CACRD,EAAK,kBAAkB,CACrB,MAAO,QACP,IAAK,QACL,SAAU,CACRA,EAAK,iBACLS,CACF,CACF,CAAC,CACH,CACF,CACF,CACF,EAKME,EAAU,oBACVC,EAAS,kBACTC,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAER,CAAE,MAAO,OAAOF,CAAO,SAASC,CAAM,iBAAiBA,CAAM,YAAa,EAI1E,CAAE,MAAO,gCAAiC,EAC1C,CAAE,MAAO,gCAAiC,EAC1C,CAAE,MAAO,gCAAiC,EAC1C,CAAE,MAAO,4CAA6C,EAGtD,CAAE,MAAO,uBAAwB,CACnC,CACF,EAEME,EAAS,CACb,SAAU,CACR,CACE,MAAO,MACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,SACL,aAAc,GACd,WAAY,GACZ,SAAUT,CACZ,CACF,CACF,EA2EMU,EAAwB,CAC5BL,EA/DuB,CACvB,SAAU,CACR,CACE,MAAO,CACL,WACAN,EACA,UACAA,CACF,CACF,EACA,CACE,MAAO,CACL,sBACAA,CACF,CACF,CACF,EACA,MAAO,CACL,EAAG,cACH,EAAG,uBACL,EACA,SAAUC,CACZ,EAjCuB,CACrB,MAAO,CACL,sBACAD,CACF,EACA,MAAO,CACL,EAAG,aACL,EACA,SAAUC,CACZ,EA8CwB,CACtB,UAAW,EACX,MAAO,CACLD,EACA,YACF,EACA,MAAO,CACL,EAAG,aACL,CACF,EA7B4B,CAC1B,UAAW,EACX,MAAO,sBACP,UAAW,mBACb,EA4BwB,CACtB,UAAW,EACX,MAAOD,EACP,MAAO,aACT,EA9B0B,CACxB,MAAO,CACL,MAAO,MACPD,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CACRY,CACF,CACF,EA4BE,CAEE,MAAOd,EAAK,SAAW,IAAK,EAC9B,CACE,UAAW,SACX,MAAOA,EAAK,oBAAsB,YAClC,UAAW,CACb,EACA,CACE,UAAW,SACX,MAAO,WACP,SAAU,CACRU,EACA,CAAE,MAAOR,CAAe,CAC1B,EACA,UAAW,CACb,EACAW,EACA,CAGE,UAAW,WACX,MAAO,4DACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,UAAW,EACX,SAAUR,CACZ,EACA,CACE,MAAO,IAAML,EAAK,eAAiB,eACnC,SAAU,SACV,SAAU,CACR,CACE,UAAW,SACX,SAAU,CACRA,EAAK,iBACLS,CACF,EACA,QAAS,KACT,SAAU,CACR,CACE,MAAO,IACP,IAAK,SACP,EACA,CACE,MAAO,OACP,IAAK,UACP,EACA,CACE,MAAO,QACP,IAAK,WACP,EACA,CACE,MAAO,MACP,IAAK,SACP,EACA,CACE,MAAO,QACP,IAAK,WACP,CACF,CACF,CACF,EAAE,OAAOF,EAAYC,CAAa,EAClC,UAAW,CACb,CACF,EAAE,OAAOD,EAAYC,CAAa,EAElCC,EAAM,SAAWM,EACjBD,EAAO,SAAWC,EASlB,IAAMC,EAAc,CAClB,CACE,MAAO,SACP,OAAQ,CACN,IAAK,IACL,SAAUD,CACZ,CACF,EACA,CACE,UAAW,cACX,MAAO,KAfW,QAeY,IAbX,kCAakC,IAZtC,iDAYyD,WACxE,OAAQ,CACN,IAAK,IACL,SAAUV,EACV,SAAUU,CACZ,CACF,CACF,EAEA,OAAAP,EAAc,QAAQD,CAAU,EAEzB,CACL,KAAM,OACN,QAAS,CACP,KACA,UACA,UACA,OACA,KACF,EACA,SAAUF,EACV,QAAS,OACT,SAAU,CAAEL,EAAK,QAAQ,CAAE,OAAQ,MAAO,CAAC,CAAE,EAC1C,OAAOgB,CAAW,EAClB,OAAOR,CAAa,EACpB,OAAOO,CAAqB,CACjC,CACF,CCpbA,SAASE,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAkB,CACtB,UAAW,wBACX,UAAW,EACX,MAAOD,EAAM,OACX,KACA,oCACAD,EAAK,SACLC,EAAM,UAAU,OAAO,CAAC,CAC5B,EACME,EAAgB,wCAChBC,EAAW,CACf,WACA,KACA,QACA,QACA,SACA,MACA,QACA,QACA,WACA,QACA,KACA,MACA,OACA,OACA,SACA,QACA,QACA,KACA,MACA,KACA,OACA,KACA,MACA,OACA,QACA,QACA,MACA,OACA,MACA,WACA,OACA,MACA,MACA,SACA,OACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,OACA,SACA,SACA,UACA,MACA,UACA,QACA,QACA,OACF,EACMC,EAAW,CACf,OACA,QACA,OACA,OACA,KACA,KACF,EACMC,EAAW,CAEf,QAEA,OACA,OACA,QACA,OACA,OACA,KACA,QACA,SACA,UACA,QACA,QACA,YACA,aACA,KACA,MACA,QACA,QACA,OACA,OACA,UACA,WACA,SACA,eACA,sBACA,oBACA,iBACA,WAEA,UACA,aACA,YACA,SACA,OACA,OACA,UACA,iBACA,gBACA,mBACA,OACA,YACA,SACA,QACA,UACA,eACA,iBACA,eACA,QACA,kBACA,eACA,cACA,SACA,WACA,UACA,aACA,OACA,iBACA,eACA,OACA,SACA,WACA,eACA,aACA,kBACF,EACMC,EAAQ,CACZ,KACA,MACA,MACA,MACA,OACA,QACA,KACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,SACA,SACA,SACA,KACF,EACA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAK,EAChB,SAAU,CACR,SAAUP,EAAK,SAAW,KAC1B,KAAMO,EACN,QAASH,EACT,QAASC,EACT,SAAUC,CACZ,EACA,QAAS,KACT,SAAU,CACRN,EAAK,oBACLA,EAAK,QAAQ,OAAQ,OAAQ,CAAE,SAAU,CAAE,MAAO,CAAE,CAAC,EACrDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,MAAO,MACP,QAAS,IACX,CAAC,EACD,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,0BAA2B,EACpC,CAAE,MAAO,iCAAkC,CAC7C,CACF,EACA,CACE,UAAW,SACX,MAAO,yBACT,EACA,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,gBAAkBG,CAAc,EACzC,CAAE,MAAO,iBAAmBA,CAAc,EAC1C,CAAE,MAAO,uBAAyBA,CAAc,EAChD,CAAE,MAAO,kDACEA,CAAc,CAC3B,EACA,UAAW,CACb,EACA,CACE,MAAO,CACL,KACA,MACAH,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,CACF,EACA,CACE,UAAW,OACX,MAAO,SACP,IAAK,MACL,SAAU,CACR,CACE,UAAW,SACX,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CACE,MAAO,CACL,MACA,MACA,cACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,UACH,EAAG,UACL,CACF,EAEA,CACE,MAAO,CACL,MACA,MACAA,EAAK,oBACL,MACA,IACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,WACH,EAAG,SACL,CACF,EACA,CACE,MAAO,CACL,OACA,MACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CACE,MAAO,CACL,uCACA,MACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CACE,MAAOA,EAAK,SAAW,KACvB,SAAU,CACR,QAAS,OACT,SAAUM,EACV,KAAMC,CACR,CACF,EACA,CACE,UAAW,cACX,MAAO,IACT,EACAL,CACF,CACF,CACF,CC9SA,IAAMM,GAASC,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACT,EACA,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACT,EACA,kBAAmB,CACjB,UAAW,WACX,MAAO,cACT,EACA,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,iBACP,CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGIC,GAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEMC,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMC,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMC,GAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,EAYV,SAASC,GAAKN,EAAM,CAClB,IAAMO,EAAQR,GAAMC,CAAI,EAClBQ,EAAoBJ,GACpBK,EAAmBN,GAEnBO,EAAgB,WAChBC,EAAe,kBAEfC,EAAW,CACf,UAAW,WACX,MAAO,OAHQ,0BAGY,OAC3B,UAAW,CACb,EAEA,MAAO,CACL,KAAM,OACN,iBAAkB,GAClB,QAAS,SACT,SAAU,CACRZ,EAAK,oBACLA,EAAK,qBAGLO,EAAM,gBACN,CACE,UAAW,cACX,MAAO,kBACP,UAAW,CACb,EACA,CACE,UAAW,iBACX,MAAO,oBACP,UAAW,CACb,EACAA,EAAM,wBACN,CACE,UAAW,eACX,MAAO,OAASN,GAAK,KAAK,GAAG,EAAI,OAEjC,UAAW,CACb,EACA,CACE,UAAW,kBACX,MAAO,KAAOQ,EAAiB,KAAK,GAAG,EAAI,GAC7C,EACA,CACE,UAAW,kBACX,MAAO,SAAWD,EAAkB,KAAK,GAAG,EAAI,GAClD,EACAI,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAEL,EAAM,eAAgB,CACpC,EACAA,EAAM,aACN,CACE,UAAW,YACX,MAAO,OAASF,GAAW,KAAK,GAAG,EAAI,MACzC,EACA,CAAE,MAAO,4oCAA6oC,EACtpC,CACE,MAAO,IACP,IAAK,QACL,UAAW,EACX,SAAU,CACRE,EAAM,cACNK,EACAL,EAAM,SACNA,EAAM,gBACNP,EAAK,kBACLA,EAAK,iBACLO,EAAM,UACNA,EAAM,iBACR,CACF,EAIA,CACE,MAAO,oBACP,SAAU,CACR,SAAUG,EACV,QAAS,kBACX,CACF,EACA,CACE,MAAO,IACP,IAAK,OACL,YAAa,GACb,SAAU,CACR,SAAU,UACV,QAASC,EACT,UAAWT,GAAe,KAAK,GAAG,CACpC,EACA,SAAU,CACR,CACE,MAAOQ,EACP,UAAW,SACb,EACA,CACE,MAAO,eACP,UAAW,WACb,EACAE,EACAZ,EAAK,kBACLA,EAAK,iBACLO,EAAM,SACNA,EAAM,eACR,CACF,EACAA,EAAM,iBACR,CACF,CACF,CC5sBA,SAASM,GAAMC,EAAM,CACnB,MAAO,CACL,KAAM,gBACN,QAAS,CACP,UACA,cACF,EACA,SAAU,CACR,CACE,UAAW,cAIX,MAAO,qCACP,OAAQ,CACN,IAAK,gBACL,YAAa,MACf,CACF,CACF,CACF,CACF,CCRA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MACbE,EAAeF,EAAK,QAAQ,KAAM,GAAG,EACrCG,EAAS,CACb,UAAW,SACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,CACF,CACF,EACMC,EAAoB,CACxB,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,EAEMC,EAAW,CACf,OACA,QAGA,SACF,EAEMC,EAAmB,CACvB,mBACA,eACA,gBACA,kBACF,EAEMC,EAAQ,CACZ,SACA,SACA,OACA,UACA,OACA,YACA,OACA,OACA,MACA,WACA,UACA,QACA,MACA,UACA,WACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,OACA,YACA,UACA,UACA,WACF,EAEMC,EAAqB,CACzB,MACA,MACA,YACA,OACA,QACA,QACA,OACA,MACF,EAGMC,EAAiB,CACrB,MACA,OACA,MACA,WACA,QACA,MACA,MACA,MACA,QACA,YACA,wBACA,KACA,aACA,OACA,aACA,KACA,OACA,SACA,gBACA,MACA,QACA,cACA,kBACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,cACA,WACA,OACA,OACA,OACA,UACA,OACA,cACA,YACA,mBACA,QACA,aACA,OACA,QACA,WACA,UACA,UACA,SACA,SACA,YACA,UACA,aACA,WACA,UACA,OACA,OACA,gBACA,MACA,OACA,QACA,YACA,aACA,SACA,QACA,OACA,YACA,UACA,kBACA,eACA,kCACA,eACA,eACA,cACA,iBACA,eACA,oBACA,eACA,eACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,WACA,UACA,UACA,SACA,SACA,aACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,OACA,QACA,MACA,YACA,gBACA,WACA,SACA,SACA,QACA,SACA,OACA,UACA,SACA,MACA,WACA,UACA,QACA,QACA,SACA,cACA,QACA,QACA,MACA,UACA,YACA,OACA,OACA,OACA,WACA,SACA,MACA,SACA,QACA,QACA,WACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,UACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,eACA,WACA,OACA,KACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,WACA,QACA,aACA,UACA,OACA,UACA,OACA,OACA,aACA,UACA,KACA,QACA,YACA,iBACA,MACA,QACA,QACA,QACA,eACA,kBACA,UACA,MACA,SACA,QACA,SACA,MACA,SACA,MACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,YACA,MACA,YACA,QACA,OACA,SACA,UACA,eACA,oBACA,KACA,SACA,MACA,OACA,KACA,MACA,OACA,OACA,KACA,QACA,MACA,QACA,OACA,WACA,UACA,YACA,YACA,UACA,MACA,UACA,eACA,kBACA,kBACA,SACA,UACA,WACA,iBACA,QACA,WACA,YACA,UACA,UACA,YACA,MACA,QACA,OACA,QACA,OACA,YACA,MACA,aACA,cACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,aACA,OACA,UACA,YACA,QACA,SACA,SACA,SACA,OACA,SACA,YACA,eACA,MACA,OACA,UACA,MACA,OACA,OACA,WACA,OACA,WACA,eACA,MACA,eACA,WACA,aACA,OACA,QACA,SACA,aACA,cACA,cACA,SACA,YACA,kBACA,WACA,MACA,YACA,SACA,cACA,cACA,QACA,cACA,MACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,YACA,kBACA,cACA,QACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,MACF,EAKMC,EAAqB,CACzB,MACA,OACA,YACA,OACA,OACA,MACA,OACA,OACA,UACA,WACA,OACA,MACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,UACA,MACA,UACA,cACA,QACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,aACA,OACA,UACA,KACA,MACA,QACA,QACA,MACA,MACA,MACA,YACA,QACA,SACA,eACA,kBACA,kBACA,WACA,iBACA,QACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,MACA,OACA,OACA,aACA,cACA,YACA,kBACA,MACA,MACA,OACA,YACA,kBACA,QACA,OACA,aACA,SACA,QACA,WACA,UACA,WACA,cACF,EAGMC,EAA0B,CAC9B,kBACA,eACA,kCACA,eACA,eACA,iBACA,mCACA,eACA,eACA,cACA,cACA,eACA,YACA,oBACA,gBACF,EAIMC,EAAS,CACb,eACA,cACA,cACA,cACA,WACA,cACA,iBACA,gBACA,cACA,gBACA,gBACA,eACA,cACA,aACA,cACA,eACF,EAEMC,EAAYH,EAEZI,EAAW,CACf,GAAGL,EACH,GAAGD,CACL,EAAE,OAAQO,GACD,CAACL,EAAmB,SAASK,CAAO,CAC5C,EAEKC,EAAW,CACf,UAAW,WACX,MAAO,qBACT,EAEMC,EAAW,CACf,UAAW,WACX,MAAO,gDACP,UAAW,CACb,EAEMC,EAAgB,CACpB,MAAOjB,EAAM,OAAO,KAAMA,EAAM,OAAO,GAAGY,CAAS,EAAG,OAAO,EAC7D,UAAW,EACX,SAAU,CAAE,SAAUA,CAAU,CAClC,EAGA,SAASM,EAAgBC,EAAM,CAC7B,WAAAC,EAAY,KAAAC,CACd,EAAI,CAAC,EAAG,CACN,IAAMC,EAAYD,EAClB,OAAAD,EAAaA,GAAc,CAAC,EACrBD,EAAK,IAAKI,GACXA,EAAK,MAAM,QAAQ,GAAKH,EAAW,SAASG,CAAI,EAC3CA,EACED,EAAUC,CAAI,EAChB,GAAGA,CAAI,KAEPA,CAEV,CACH,CAEA,MAAO,CACL,KAAM,MACN,iBAAkB,GAElB,QAAS,WACT,SAAU,CACR,SAAU,YACV,QACEL,EAAgBL,EAAU,CAAE,KAAOW,GAAMA,EAAE,OAAS,CAAE,CAAC,EACzD,QAASpB,EACT,KAAME,EACN,SAAUI,CACZ,EACA,SAAU,CACR,CACE,MAAOV,EAAM,OAAO,GAAGW,CAAM,EAC7B,UAAW,EACX,SAAU,CACR,SAAU,UACV,QAASE,EAAS,OAAOF,CAAM,EAC/B,QAASP,EACT,KAAME,CACR,CACF,EACA,CACE,UAAW,OACX,MAAON,EAAM,OAAO,GAAGK,CAAgB,CACzC,EACAY,EACAF,EACAb,EACAC,EACAJ,EAAK,cACLA,EAAK,qBACLE,EACAe,CACF,CACF,CACF,CC9pBA,SAASS,GAAOC,EAAI,CAClB,OAAKA,EACD,OAAOA,GAAO,SAAiBA,EAE5BA,EAAG,OAHM,IAIlB,CAMA,SAASC,GAAUD,EAAI,CACrB,OAAOE,GAAO,MAAOF,EAAI,GAAG,CAC9B,CAMA,SAASE,MAAUC,EAAM,CAEvB,OADeA,EAAK,IAAKC,GAAML,GAAOK,CAAC,CAAC,EAAE,KAAK,EAAE,CAEnD,CAMA,SAASC,GAAqBF,EAAM,CAClC,IAAMG,EAAOH,EAAKA,EAAK,OAAS,CAAC,EAEjC,OAAI,OAAOG,GAAS,UAAYA,EAAK,cAAgB,QACnDH,EAAK,OAAOA,EAAK,OAAS,EAAG,CAAC,EACvBG,GAEA,CAAC,CAEZ,CAWA,SAASC,MAAUJ,EAAM,CAMvB,MAHe,KADFE,GAAqBF,CAAI,EAE5B,QAAU,GAAK,MACrBA,EAAK,IAAKC,GAAML,GAAOK,CAAC,CAAC,EAAE,KAAK,GAAG,EAAI,GAE7C,CAEA,IAAMI,GAAiBC,GAAWP,GAChC,KACAO,EACA,MAAM,KAAKA,CAAO,EAAI,KAAO,IAC/B,EAGMC,GAAc,CAClB,WACA,MACF,EAAE,IAAIF,EAAc,EAGdG,GAAsB,CAC1B,OACA,MACF,EAAE,IAAIH,EAAc,EAGdI,GAAe,CACnB,MACA,MACF,EAGMC,GAAW,CAIf,QACA,MACA,iBACA,QACA,QACA,OACA,MACA,KACA,YACA,QACA,OACA,QACA,QACA,UACA,YACA,WACA,cACA,OACA,UACA,QACA,SACA,SACA,cACA,KACA,UACA,OACA,OACA,OACA,YACA,cACA,qBACA,cACA,QACA,MACA,OACA,MACA,QACA,KACA,SACA,WACA,QACA,SACA,QACA,QACA,kBACA,WACA,KACA,KACA,WACA,cACA,OACA,MACA,QACA,WACA,cACA,cACA,OACA,WACA,WACA,WACA,UACA,kBACA,SACA,iBACA,UACA,WACA,gBACA,SACA,SACA,WACA,WACA,SACA,MACA,OACA,SACA,SACA,YACA,QACA,SACA,SACA,QACA,QACA,OACA,MACA,YACA,kBACA,oBACA,UACA,MACA,OACA,QACA,QACA,SACF,EAMMC,GAAW,CACf,QACA,MACA,MACF,EAGMC,GAA0B,CAC9B,aACA,gBACA,aACA,OACA,YACA,OACA,OACF,EAIMC,GAAqB,CACzB,gBACA,UACA,aACA,QACA,UACA,SACA,SACA,QACA,UACA,eACA,YACA,YACA,MACA,gBACA,WACA,QACA,YACA,kBACA,UACF,EAGMC,GAAW,CACf,MACA,MACA,MACA,SACA,mBACA,aACA,OACA,aACA,YACA,4BACA,MACA,MACA,cACA,eACA,eACA,eACA,sBACA,QACA,WACA,gBACA,WACA,SACA,OACA,oCACA,YACA,OACA,gBACA,iBACA,uBACA,2BACA,oBACA,aACA,0BACA,KACF,EAGMC,GAAeX,GACnB,oBACA,kBACA,iBACA,iBACA,iBACA,mCACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,UACF,EAGMY,GAAoBZ,GACxBW,GACA,kBACA,kBACA,kBACA,kBACA,iBAGF,EAGME,GAAWlB,GAAOgB,GAAcC,GAAmB,GAAG,EAGtDE,GAAiBd,GACrB,YACA,uDACA,yDACA,yDACA,kBACA,+DACA,yDACA,+BACA,yDACA,yDACA,8BAMF,EAGMe,GAAsBf,GAC1Bc,GACA,KACA,wDACF,EAGME,GAAarB,GAAOmB,GAAgBC,GAAqB,GAAG,EAG5DE,GAAiBtB,GAAO,QAASoB,GAAqB,GAAG,EAKzDG,GAAoB,CACxB,WACA,cACAvB,GAAO,eAAgBK,GAAO,QAAS,QAAS,GAAG,EAAG,IAAI,EAC1D,oBACA,kBACA,sBACA,WACA,eACA,SACA,gBACA,WACA,eACA,gBACA,WACA,gBACA,YACA,OACA,UACA,oBACA,YACA,YACAL,GAAO,SAAUqB,GAAY,IAAI,EACjC,OACA,cACA,kBACA,iCACA,gBACA,WACA,WACA,oBACA,YACA,UACA,mBACA,yBACF,EAGMG,GAAuB,CAC3B,MACA,0BACA,QACA,4BACA,cACA,kCACA,UACA,8BACA,OACA,2BACA,OACF,EAaA,SAASC,GAAMC,EAAM,CACnB,IAAMC,EAAa,CACjB,MAAO,MACP,UAAW,CACb,EAEMC,EAAgBF,EAAK,QACzB,OACA,OACA,CAAE,SAAU,CAAE,MAAO,CAAE,CACzB,EACMG,EAAW,CACfH,EAAK,oBACLE,CACF,EAIME,EAAc,CAClB,MAAO,CACL,KACAzB,GAAO,GAAGG,GAAa,GAAGC,EAAmB,CAC/C,EACA,UAAW,CAAE,EAAG,SAAU,CAC5B,EACMsB,EAAgB,CAEpB,MAAO/B,GAAO,KAAMK,GAA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GACA,CACE,cAAe,6CACf,IAAK,MACL,WAAY,GACZ,SAAUxC,EACV,SAAU,CACRV,EAAK,QAAQA,EAAK,WAAY,CAC5B,UAAW,cACX,MAAO,uCACT,CAAC,EACD,GAAGW,CACL,CACF,EACAwC,GACAC,GACA,CACE,cAAe,SACf,IAAK,IACL,SAAU,CAAE,GAAGjD,CAAS,EACxB,UAAW,CACb,EACA8B,GACA,GAAGtB,EACH,GAAGG,EACH,GAAGG,EACHG,EACAO,EACA,GAAGU,EACH,GAAGI,EACHC,EACAG,EACF,CACF,CACF,CCr5BA,IAAMY,GAAW,2BACXC,GAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACF,EACMC,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACF,EAGMC,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACF,EAEMC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACF,EAEMC,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACF,EAEMC,GAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACF,EAEMC,GAAY,CAAC,EAAE,OACnBF,GACAF,GACAC,EACF,EAWA,SAASI,GAAWC,EAAM,CACxB,IAAMC,EAAQD,EAAK,MAQbE,EAAgB,CAACC,EAAO,CAAE,MAAAC,CAAM,IAAM,CAC1C,IAAMC,EAAM,KAAOF,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,IAAK,CAAE,SAAU,CAClD,CAAE,MAAO,GAAI,EACb,CAEE,MAAO,oBAAqB,CAChC,CAAE,CAAC,EAYH,MAAO,CACL,KAAM,oBACN,QAAS,CAAE,IAAK,EAChB,iBAAkB,GAClB,iBAAkB,CAAE,MAAO,QAAS,EACpC,SAAU,CACR,QACE,k2BAWF,SAEE,2OAGF,KAEE,4GACF,QAAS,oBACX,EACA,QACE,4CACF,SAAU,CACRE,EACAC,EACAK,EACAC,EACAC,EACAC,EACAC,EA/Ce,CACjB,UAAW,OAEX,MAAO,2EACP,IAAK,IACL,SAAU,CAAE,QACR,oEAAqE,EACzE,SAAU,CAAEA,CAAQ,CACtB,CAyCE,CACF,CACF,CCjJA,SAASC,GAAKC,EAAM,CAClBA,EAAK,MACL,IAAMC,EAAgBD,EAAK,QAAQ,MAAO,KAAK,EAC/CC,EAAc,SAAS,KAAK,MAAM,EAClC,IAAMC,EAAeF,EAAK,QAAQ,KAAM,GAAG,EAErCG,EAAM,CACV,UACA,QACA,KACA,QACA,WACA,OACA,gBACA,OACA,OACA,OACA,OACA,MACA,SACA,OACA,aACA,aACA,YACA,YACA,YACA,aACA,YACA,SACA,KACA,SACA,QACA,OACA,SACA,cACA,cACA,SACA,MACA,MACA,SACA,QACA,SACA,SACA,SACA,aACA,YACA,QACA,QACA,YACA,OACA,OACA,aACF,EAEMC,EAAqB,CACzB,MAAO,CACL,8BACA,MACA,WACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,CACF,EAEMC,EAAW,CACf,UAAW,WACX,MAAO,UACT,EAEMC,EAAS,CACb,MAAO,gBACP,UAAW,cACX,UAAW,CACb,EAEMC,EAAS,CACb,UAAW,SACX,UAAW,EAEX,MAAO,iNACT,EAEMC,EAAO,CAEX,MAAO,0BACP,UAAW,MACb,EAEMC,EAAkB,CACtB,UAAW,UAEX,MAAO,mZACT,EAcA,MAAO,CACL,KAAM,cACN,SAAU,CACR,SAAU,SACV,QAASN,CACX,EACA,SAAU,CACRD,EACAD,EApBiB,CACnB,MAAO,CACL,mBACA,MACA,GACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,UACL,CACF,EAYII,EACAC,EACAF,EACAJ,EAAK,kBACLQ,EACAC,EACAF,CACF,CACF,CACF,CChIA,SAASG,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MAQbE,EAAcD,EAAM,OAAO,YAAaA,EAAM,SAAS,kBAAkB,EAAG,iBAAiB,EAC7FE,EAAe,mBACfC,EAAe,CACnB,UAAW,SACX,MAAO,kCACT,EACMC,EAAoB,CACxB,MAAO,KACP,SAAU,CACR,CACE,UAAW,UACX,MAAO,sBACP,QAAS,IACX,CACF,CACF,EACMC,EAAwBN,EAAK,QAAQK,EAAmB,CAC5D,MAAO,KACP,IAAK,IACP,CAAC,EACKE,EAAwBP,EAAK,QAAQA,EAAK,iBAAkB,CAAE,UAAW,QAAS,CAAC,EACnFQ,EAAyBR,EAAK,QAAQA,EAAK,kBAAmB,CAAE,UAAW,QAAS,CAAC,EACrFS,EAAgB,CACpB,eAAgB,GAChB,QAAS,IACT,UAAW,EACX,SAAU,CACR,CACE,UAAW,OACX,MAAON,EACP,UAAW,CACb,EACA,CACE,MAAO,OACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,WAAY,GACZ,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEC,CAAa,CAC3B,EACA,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEA,CAAa,CAC3B,EACA,CAAE,MAAO,cAAe,CAC1B,CACF,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,KAAM,YACN,QAAS,CACP,OACA,QACA,MACA,OACA,MACA,MACA,MACA,QACA,MACA,KACF,EACA,iBAAkB,GAClB,aAAc,GACd,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,UAAW,GACX,SAAU,CACRC,EACAG,EACAD,EACAD,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,SAAU,CACRD,EACAC,EACAE,EACAD,CACF,CACF,CACF,CACF,CACF,CACF,EACAP,EAAK,QACH,OACA,MACA,CAAE,UAAW,EAAG,CAClB,EACA,C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",
  "names": ["require_lib", "__commonJSMin", "exports", "module", "toArr", "any", "toVal", "out", "key", "val", "opts", "x", "old", "nxt", "args", "k", "arr", "arg", "name", "i", "j", "idx", "len", "alibi", "strict", "defaults", "keys", "require_src", "__commonJSMin", "exports", "module", "ESC", "CSI", "beep", "cursor", "x", "y", "ret", "count", "scroll", "erase", "clear", "i", "require_picocolors", "__commonJSMin", "exports", "module", "p", "argv", "env", "isColorSupported", "formatter", "open", "close", "replace", "input", "string", "index", "replaceClose", "result", "cursor", "createColors", "enabled", "f", "objectToString", "isError", "wat", "isInstanceOf", "isBuiltin", "className", "isErrorEvent", "isDOMError", "isDOMException", "isString", "isPrimitive", "isPlainObject", "isEvent", "isElement", "isRegExp", "isThenable", "isSyntheticEvent", "isNaN", "base", "isVueViewModel", "truncate", "str", "max", "snipLine", "line", "colno", "newLine", "lineLength", "start", "end", "safeJoin", "input", "delimiter", "output", "i", "value", "isVueViewModel", "isMatchingPattern", "pattern", "requireExactStringMatch", "isString", "isRegExp", "stringMatchesSomePattern", "testString", "patterns", "applyAggregateErrorsToEvent", "exceptionFromErrorImplementation", "parser", "maxValueLimit", "key", "limit", "event", "hint", "isInstanceOf", "originalException", "truncateAggregateExceptions", "aggregateExceptionsFromError", "error", "prevExceptions", "exception", "exceptionId", "newExceptions", "applyExceptionGroupFieldsForParentException", "newException", "newExceptionId", "applyExceptionGroupFieldsForChildException", "childError", "i", "source", "parentId", "exceptions", "maxValueLength", "truncate", "isGlobalObj", "obj", "GLOBAL_OBJ", "getGlobalObject", "getGlobalSingleton", "name", "creator", "gbl", "__SENTRY__", "WINDOW", "getGlobalObject", "DEFAULT_MAX_STRING_LENGTH", "htmlTreeAsString", "elem", "options", "currentElem", "MAX_TRAVERSE_HEIGHT", "out", "height", "len", "separator", "sepLength", "nextStr", "keyAttrs", "maxStringLength", "_htmlElementAsString", "el", "className", "classes", "key", "attr", "i", "keyAttrPairs", "keyAttr", "keyAttrPair", "isString", "allowedAttrs", "getLocationHref", "getDomElement", "selector", "PREFIX", "CONSOLE_LEVELS", "originalConsoleMethods", "consoleSandbox", "callback", "GLOBAL_OBJ", "console", "wrappedFuncs", "wrappedLevels", "level", "originalConsoleMethod", "makeLogger", "enabled", "logger", "name", "args", "DSN_REGEX", "isValidProtocol", "protocol", "dsnToString", "dsn", "withPassword", "host", "path", "pass", "port", "projectId", "publicKey", "dsnFromString", "str", "match", "lastPath", "split", "projectMatch", "dsnFromComponents", "components", "validateDsn", "component", "logger", "makeDsn", "from", "SentryError", "message", "logLevel", "fill", "source", "name", "replacementFactory", "original", "wrapped", "markFunctionWrapped", "addNonEnumerableProperty", "obj", "value", "proto", "getOriginalFunction", "func", "urlEncode", "object", "key", "convertToPlainObject", "isError", "getOwnProperties", "isEvent", "newObj", "serializeEventTarget", "isInstanceOf", "target", "isElement", "htmlTreeAsString", "extractedProps", "property", "extractExceptionKeysForMessage", "exception", "maxLength", "keys", "truncate", "includedKeys", "serialized", "dropUndefinedKeys", "inputValue", "_dropUndefinedKeys", "memoizationMap", "isPlainObject", "memoVal", "returnValue", "item", "objectify", "wat", "objectified", "isPrimitive", "node", "getModule", "FILENAME_MATCH", "FULL_MATCH", "line", "lineMatch", "object", "method", "functionName", "typeName", "methodName", "methodStart", "objectEnd", "filename", "isNative", "in_app", "STACKTRACE_FRAME_LIMIT", "WEBPACK_ERROR_REGEXP", "STRIP_FRAME_REGEXP", "createStackParser", "parsers", "sortedParsers", "a", "b", "p", "stack", "skipFirst", "frames", "lines", "i", "line", "cleanedLine", "parser", "frame", "stripSentryFramesAndReverse", "stackParserFromStackParserOptions", "stackParser", "localStack", "defaultFunctionName", "getFunctionName", "fn", "nodeStackLineParser", "getModule", "node", "WINDOW", "getGlobalObject", "supportsErrorEvent", "supportsDOMError", "supportsDOMException", "supportsFetch", "isNativeFetch", "func", "supportsNativeFetch", "result", "doc", "sandbox", "err", "logger", "supportsReportingObserver", "supportsReferrerPolicy", "WINDOW", "getGlobalObject", "supportsHistory", "chrome", "isChromePackagedApp", "hasHistoryApi", "WINDOW", "getGlobalObject", "SENTRY_XHR_DATA_KEY", "handlers", "instrumented", "instrument", "type", "instrumentConsole", "instrumentDOM", "instrumentXHR", "instrumentFetch", "instrumentHistory", "instrumentError", "instrumentUnhandledRejection", "logger", "addInstrumentationHandler", "callback", "resetInstrumentationHandlers", "key", "triggerHandlers", "data", "handler", "e", "getFunctionName", "GLOBAL_OBJ", "CONSOLE_LEVELS", "level", "fill", "originalConsoleMethod", "originalConsoleMethods", "args", "log", "supportsNativeFetch", "originalFetch", "method", "url", "parseFetchArgs", "handlerData", "response", "error", "hasProp", "obj", "prop", "getUrlFromResource", "resource", "fetchArgs", "options", "arg", "xhrproto", "originalOpen", "xhrInfo", "isString", "onreadystatechangeHandler", "original", "readyStateArgs", "setRequestHeaderArgs", "header", "value", "originalSend", "sentryXhrData", "lastHref", "supportsHistory", "oldOnPopState", "to", "from", "historyReplacementFunction", "originalHistoryFunction", "debounceDuration", "debounceTimerID", "lastCapturedEvent", "shouldShortcircuitPreviousDebounce", "previous", "current", "shouldSkipDOMEvent", "event", "target", "makeDOMEventHandler", "globalListener", "name", "triggerDOMHandler", "globalDOMEventHandler", "proto", "originalAddEventListener", "listener", "el", "handlerForType", "originalRemoveEventListener", "_oldOnErrorHandler", "msg", "line", "column", "_oldOnUnhandledRejectionHandler", "memoKhulnasoft", "hasWeakSet", "inner", "memoize", "obj", "i", "unmemoize", "uuid4", "gbl", "GLOBAL_OBJ", "crypto", "getRandomByte", "c", "getFirstException", "event", "getEventDescription", "message", "eventId", "firstException", "addExceptionTypeValue", "value", "type", "exception", "values", "addExceptionMechanism", "newMechanism", "defaultMechanism", "currentMechanism", "mergedData", "SEMVER_REGEXP", "parseSemver", "input", "match", "major", "minor", "patch", "addContextToFrame", "lines", "frame", "linesOfContext", "maxLines", "sourceLine", "line", "snipLine", "checkOrSetAlreadyCaught", "addNonEnumerableProperty", "arrayify", "maybeArray", "isBrowserBundle", "getSDKSource", "isNodeEnv", "isBrowserBundle", "dynamicRequire", "mod", "request", "loadModule", "moduleName", "module", "cwd", "normalize", "input", "depth", "maxProperties", "visit", "err", "normalizeToSize", "object", "maxSize", "normalized", "jsonSize", "key", "value", "memo", "memoKhulnasoft", "memoize", "unmemoize", "isNaN", "stringified", "stringifyValue", "remainingDepth", "valueWithToJSON", "jsonValue", "numAdded", "visitable", "convertToPlainObject", "visitKey", "visitValue", "isVueViewModel", "isSyntheticEvent", "getFunctionName", "objName", "getConstructorName", "prototype", "utf8Length", "normalizeArray", "parts", "allowAboveRoot", "up", "i", "last", "splitPathRe", "splitPath", "filename", "truncated", "resolve", "args", "resolvedPath", "resolvedAbsolute", "path", "p", "trim", "arr", "start", "end", "relative", "from", "to", "fromParts", "toParts", "length", "samePartsLength", "outputParts", "normalizePath", "isPathAbsolute", "isAbsolute", "trailingSlash", "normalizedPath", "join", "dirname", "result", "root", "dir", "basename", "ext", "f", "States", "RESOLVED", "REJECTED", "resolvedSyncPromise", "value", "SyncPromise", "resolve", "rejectedSyncPromise", "reason", "_", "reject", "_SyncPromise", "executor", "e", "onfulfilled", "onrejected", "result", "val", "onfinally", "isRejected", "state", "isThenable", "cachedHandlers", "handler", "makePromiseBuffer", "limit", "buffer", "isReady", "remove", "task", "add", "taskProducer", "rejectedSyncPromise", "SentryError", "drain", "timeout", "SyncPromise", "resolve", "reject", "counter", "capturedSetTimeout", "item", "resolvedSyncPromise", "parseUrl", "url", "match", "query", "fragment", "stripUrlQueryAndFragment", "urlPath", "getNumberOfUrlSegments", "s", "getSanitizedUrlString", "protocol", "host", "path", "filteredHost", "DEFAULT_INCLUDES", "DEFAULT_REQUEST_INCLUDES", "DEFAULT_USER_INCLUDES", "addRequestDataToTransaction", "transaction", "req", "deps", "extractPathForTransaction", "extractQueryParams", "options", "method", "path", "source", "stripUrlQueryAndFragment", "name", "extractTransaction", "type", "extractUserData", "user", "keys", "extractedUser", "key", "extractRequestData", "include", "requestData", "headers", "host", "protocol", "originalUrl", "absoluteUrl", "isString", "normalize", "addRequestDataToEvent", "event", "extractedRequestData", "isPlainObject", "ip", "validSeverityLevels", "severityFromString", "level", "severityLevelFromString", "WINDOW", "getGlobalObject", "dateTimestampSource", "getBrowserPerformance", "performance", "timeOrigin", "getNodePerformance", "dynamicRequire", "module", "platformPerformance", "isNodeEnv", "timestampSource", "dateTimestampInSeconds", "timestampInSeconds", "timestampWithMs", "usingPerformanceAPI", "_browserPerformanceTimeOriginMode", "browserPerformanceTimeOrigin", "threshold", "performanceNow", "dateNow", "timeOriginDelta", "timeOriginIsReliable", "navigationStart", "navigationStartDelta", "navigationStartIsReliable", "BAGGAGE_HEADER_NAME", "SENTRY_BAGGAGE_KEY_PREFIX", "SENTRY_BAGGAGE_KEY_PREFIX_REGEX", "MAX_BAGGAGE_STRING_LENGTH", "baggageHeaderToDynamicSamplingContext", "baggageHeader", "isString", "baggageObject", "acc", "curr", "currBaggageObject", "baggageHeaderToObject", "dynamicSamplingContext", "key", "value", "nonPrefixedKey", "dynamicSamplingContextToSentryBaggageHeader", "sentryPrefixedDSC", "dscKey", "dscValue", "objectToBaggageHeader", "baggageEntry", "keyOrValue", "object", "objectKey", "objectValue", "currentIndex", "newBaggageHeader", "logger", "TRACEPARENT_REGEXP", "extractTraceparentData", "traceparent", "matches", "parentSampled", "tracingContextFromHeaders", "sentryTrace", "baggage", "traceparentData", "dynamicSamplingContext", "baggageHeaderToDynamicSamplingContext", "traceId", "parentSpanId", "propagationContext", "uuid4", "generateSentryTraceHeader", "spanId", "sampled", "sampledString", "createEnvelope", "headers", "items", "addItemToEnvelope", "envelope", "newItem", "forEachEnvelopeItem", "callback", "envelopeItems", "envelopeItem", "envelopeItemType", "envelopeContainsItemType", "types", "_", "type", "encodeUTF8", "input", "textEncoder", "serializeEnvelope", "envHeaders", "parts", "append", "next", "item", "itemHeaders", "payload", "stringifiedPayload", "normalize", "concatBuffers", "buffers", "totalLength", "acc", "buf", "merged", "offset", "buffer", "parseEnvelope", "env", "textDecoder", "readBinary", "length", "bin", "readJson", "i", "envelopeHeader", "itemHeader", "binaryLength", "createAttachmentEnvelopeItem", "attachment", "dropUndefinedKeys", "ITEM_TYPE_TO_DATA_CATEGORY_MAP", "envelopeItemTypeToDataCategory", "getSdkMetadataForEnvelopeHeader", "metadataOrEvent", "name", "version", "createEventEnvelopeHeaders", "event", "sdkInfo", "tunnel", "dsn", "dynamicSamplingContext", "dsnToString", "createClientReportEnvelope", "discarded_events", "dsn", "timestamp", "clientReportItem", "dateTimestampInSeconds", "createEnvelope", "DEFAULT_RETRY_AFTER", "parseRetryAfterHeader", "header", "now", "headerDelay", "headerDate", "disabledUntil", "limits", "category", "isRateLimited", "updateRateLimits", "statusCode", "headers", "updatedRateLimits", "rateLimitHeader", "retryAfterHeader", "limit", "retryAfter", "categories", "delay", "setNestedKey", "obj", "keyPath", "value", "match", "innerObj", "addOrUpdateIntegration", "defaultIntegrationInstance", "userIntegrations", "forcedOptions", "addOrUpdateIntegrationInArray", "addOrUpdateIntegrationInFunction", "userInstance", "integration", "userIntegrationsFunc", "defaultIntegrations", "userFinalIntegrations", "makeFifoCache", "size", "evictionOrder", "cache", "key", "value", "evictCandidate", "parseStackFrames", "stackParser", "error", "exceptionFromError", "exception", "frames", "eventFromUnknownInput", "getCurrentHub", "hint", "ex", "mechanism", "isError", "isPlainObject", "message", "extractExceptionKeysForMessage", "hub", "client", "normalizeDepth", "scope", "normalizeToSize", "event", "addExceptionTypeValue", "addExceptionMechanism", "eventFromMessage", "level", "attachStacktrace", "escapeStringForRegex", "regexString", "require_cjs", "__commonJSMin", "exports", "aggregateErrors", "browser", "dsn", "error", "worldwide", "instrument", "is", "logger", "memo", "misc", "node", "normalize", "object", "path", "promisebuffer", "requestdata", "severity", "stacktrace", "string", "supports", "syncpromise", "time", "tracing", "env", "envelope", "clientreport", "ratelimit", "baggage", "url", "userIntegrations", "cache", "eventkhulnasoft", "escapeStringForRegex", "supportsHistory", "DEFAULT_ENVIRONMENT", "makeSession", "context", "startingTime", "timestampInSeconds", "session", "uuid4", "sessionToJSON", "updateSession", "duration", "closeSession", "status", "dropUndefinedKeys", "DEFAULT_MAX_BREADCRUMBS", "Scope", "_Scope", "generatePropagationContext", "scope", "newScope", "callback", "user", "updateSession", "requestSession", "tags", "key", "value", "extras", "extra", "fingerprint", "level", "name", "context", "span", "session", "captureContext", "updatedScope", "isPlainObject", "breadcrumb", "maxBreadcrumbs", "maxCrumbs", "mergedBreadcrumb", "dateTimestampInSeconds", "breadcrumbs", "attachment", "event", "hint", "transaction", "transactionName", "scopeBreadcrumbs", "getGlobalEventProcessors", "newData", "processors", "index", "SyncPromise", "resolve", "reject", "processor", "result", "logger", "isThenable", "final", "arrayify", "getGlobalSingleton", "addGlobalEventProcessor", "uuid4", "API_VERSION", "DEFAULT_BREADCRUMBS", "Hub", "client", "scope", "Scope", "_version", "version", "top", "callback", "exception", "hint", "eventId", "uuid4", "syntheticException", "message", "level", "event", "breadcrumb", "beforeBreadcrumb", "maxBreadcrumbs", "mergedBreadcrumb", "dateTimestampInSeconds", "finalBreadcrumb", "consoleSandbox", "user", "tags", "extras", "key", "value", "extra", "name", "context", "oldHub", "makeMain", "integration", "logger", "customSamplingContext", "result", "endSession", "session", "closeSession", "release", "environment", "DEFAULT_ENVIRONMENT", "userAgent", "GLOBAL_OBJ", "makeSession", "currentSession", "updateSession", "options", "method", "args", "sentry", "getMainCarrier", "hub", "registry", "getHubFromCarrier", "setHubOnCarrier", "getCurrentHub", "getGlobalHub", "hasHubOnCarrier", "ensureHubOnCarrier", "carrier", "parent", "globalHubTopStack", "setAsyncContextStrategy", "strategy", "runWithAsyncContext", "getGlobalSingleton", "__SENTRY__", "hasTracingEnabled", "maybeOptions", "client", "getCurrentHub", "options", "getActiveTransaction", "maybeHub", "getCurrentHub", "errorsInstrumented", "registerErrorInstrumentation", "addInstrumentationHandler", "errorCallback", "activeTransaction", "getActiveTransaction", "status", "logger", "SpanRecorder", "maxlen", "span", "Span", "_Span", "spanContext", "uuid4", "timestampInSeconds", "name", "childSpan", "opStr", "nameStr", "idStr", "logMessage", "logger", "key", "value", "httpStatus", "spanStatus", "spanStatusfromHttpCode", "endTimestamp", "generateSentryTraceHeader", "dropUndefinedKeys", "getDynamicSamplingContextFromClient", "trace_id", "client", "scope", "options", "public_key", "user_segment", "dsc", "dropUndefinedKeys", "DEFAULT_ENVIRONMENT", "Transaction", "SpanClass", "transactionContext", "hub", "getCurrentHub", "incomingDynamicSamplingContext", "newName", "name", "source", "maxlen", "SpanRecorder", "key", "context", "value", "unit", "newMetadata", "endTimestamp", "logger", "client", "finishedSpans", "s", "prev", "current", "metadata", "transaction", "spanContext", "dropUndefinedKeys", "scope", "dsc", "getDynamicSamplingContextFromClient", "maybeSampleRate", "TRACING_DEFAULTS", "FINISH_REASON_TAG", "IDLE_TRANSACTION_FINISH_REASONS", "IdleTransactionSpanRecorder", "SpanRecorder", "_pushActivity", "_popActivity", "transactionSpanId", "maxlen", "span", "endTimestamp", "timestampInSeconds", "IdleTransaction", "Transaction", "transactionContext", "_idleHub", "_idleTimeout", "_finalTimeout", "_heartbeatInterval", "_onScope", "logger", "scope", "callback", "spanStartedBeforeTransactionFinish", "timeoutWithMarginOfError", "spanEndedBeforeFinalTimeout", "stringifiedSpan", "pushActivity", "id", "popActivity", "restartOnChildSpanChange", "reason", "spanId", "heartbeatString", "traceHeaders", "span", "sample", "transaction", "options", "samplingContext", "hasTracingEnabled", "sampleRate", "isValidSampleRate", "logger", "rate", "isNaN", "_startTransaction", "transactionContext", "customSamplingContext", "client", "configInstrumenter", "transactionInstrumenter", "Transaction", "startIdleTransaction", "hub", "idleTimeout", "finalTimeout", "onScope", "heartbeatInterval", "IdleTransaction", "addTracingExtensions", "carrier", "getMainCarrier", "registerErrorInstrumentation", "SpanStatus", "Ok", "DeadlineExceeded", "Unauthenticated", "PermissionDenied", "NotFound", "ResourceExhausted", "InvalidArgument", "Unimplemented", "Unavailable", "InternalError", "UnknownError", "Cancelled", "AlreadyExists", "FailedPrecondition", "Aborted", "OutOfRange", "DataLoss", "trace", "context", "callback", "onError", "ctx", "normalizeContext", "hub", "getCurrentHub", "scope", "parentSpan", "activeSpan", "createChildSpanOrTransaction", "finishAndSetSpan", "maybePromiseResult", "e", "isThenable", "startSpan", "startActiveSpan", "startSpanManual", "startInactiveSpan", "hasTracingEnabled", "getActiveSpan", "setMeasurement", "name", "value", "unit", "transaction", "getActiveTransaction", "captureException", "exception", "captureContext", "getCurrentHub", "captureMessage", "message", "level", "context", "captureEvent", "event", "hint", "configureScope", "callback", "addBreadcrumb", "breadcrumb", "setContext", "name", "setExtras", "extras", "setExtra", "key", "extra", "setTags", "tags", "setTag", "value", "setUser", "user", "withScope", "startTransaction", "customSamplingContext", "captureCheckIn", "checkIn", "upsertMonitorConfig", "hub", "scope", "client", "logger", "uuid4", "flush", "timeout", "close", "lastEventId", "SessionFlusher", "client", "attrs", "sessionAggregates", "aggregates", "key", "dropUndefinedKeys", "scope", "getCurrentHub", "requestSession", "status", "date", "sessionStartedTrunc", "aggregationCounts", "SENTRY_API_VERSION", "getBaseApiEndpoint", "dsn", "protocol", "port", "_getIngestEndpoint", "_encodedAuth", "sdkInfo", "urlEncode", "getEnvelopeEndpointWithUrlEncodedAuth", "tunnelOrOptions", "tunnel", "getReportDialogEndpoint", "dsnLike", "dialogOptions", "makeDsn", "endpoint", "encodedOptions", "dsnToString", "key", "user", "enhanceEventWithSdkInfo", "event", "sdkInfo", "createSessionEnvelope", "session", "dsn", "metadata", "tunnel", "getSdkMetadataForEnvelopeHeader", "envelopeHeaders", "dsnToString", "envelopeItem", "createEnvelope", "createEventEnvelope", "eventType", "createEventEnvelopeHeaders", "eventItem", "installedIntegrations", "filterDuplicates", "integrations", "integrationsByName", "currentInstance", "name", "existingInstance", "k", "getIntegrationsToSetup", "options", "defaultIntegrations", "userIntegrations", "integration", "arrayify", "finalIntegrations", "debugIndex", "findIndex", "debugInstance", "setupIntegrations", "client", "integrationIndex", "setupIntegration", "addGlobalEventProcessor", "getCurrentHub", "callback", "event", "hint", "logger", "arr", "i", "prepareEvent", "options", "event", "hint", "scope", "normalizeDepth", "normalizeMaxBreadth", "prepared", "uuid4", "dateTimestampInSeconds", "integrations", "i", "applyClientOptions", "applyIntegrationsMetadata", "applyDebugIds", "finalScope", "Scope", "result", "resolvedSyncPromise", "attachments", "evt", "applyDebugMeta", "normalizeEvent", "environment", "release", "dist", "maxValueLength", "DEFAULT_ENVIRONMENT", "truncate", "exception", "request", "debugIdStackParserCache", "stackParser", "debugIdMap", "GLOBAL_OBJ", "debugIdStackFramesCache", "cachedDebugIdStackFrameCache", "filenameDebugIdMap", "acc", "debugIdStackTrace", "parsedStack", "cachedParsedStack", "stackFrame", "frame", "images", "filename", "integrationNames", "depth", "maxBreadth", "normalized", "b", "normalize", "span", "ALREADY_SEEN_ERROR", "BaseClient", "options", "makeDsn", "logger", "url", "getEnvelopeEndpointWithUrlEncodedAuth", "exception", "hint", "scope", "checkOrSetAlreadyCaught", "eventId", "event", "result", "message", "level", "promisedEvent", "isPrimitive", "session", "updateSession", "timeout", "transport", "clientFinished", "transportFlushed", "resolvedSyncPromise", "setupIntegrations", "integrationId", "integration", "setupIntegration", "env", "createEventEnvelope", "attachment", "addItemToEnvelope", "createAttachmentEnvelopeItem", "promise", "sendResponse", "createSessionEnvelope", "reason", "category", "_event", "key", "hook", "callback", "rest", "crashed", "errored", "exceptions", "ex", "mechanism", "sessionNonTerminal", "SyncPromise", "resolve", "ticked", "tick", "interval", "integrations", "prepareEvent", "evt", "propagationContext", "trace_id", "spanId", "parentSpanId", "dsc", "dynamicSamplingContext", "getDynamicSamplingContextFromClient", "finalEvent", "sentryError", "sampleRate", "rejectedSyncPromise", "SentryError", "isTransaction", "isTransactionEvent", "isError", "isErrorEvent", "eventType", "beforeSendLabel", "dataCategory", "prepared", "processBeforeSend", "_validateBeforeSendResult", "processedEvent", "transactionInfo", "source", "value", "envelope", "outcomes", "beforeSendResult", "invalidValueError", "isThenable", "isPlainObject", "e", "beforeSend", "beforeSendTransaction", "createCheckInEnvelope", "checkIn", "dynamicSamplingContext", "metadata", "tunnel", "dsn", "headers", "dsnToString", "dropUndefinedKeys", "item", "createCheckInEnvelopeItem", "createEnvelope", "ServerRuntimeClient", "BaseClient", "options", "addTracingExtensions", "exception", "hint", "eventFromUnknownInput", "getCurrentHub", "message", "level", "eventFromMessage", "checkIn", "monitorConfig", "scope", "id", "uuid4", "logger", "release", "environment", "tunnel", "serializedCheckIn", "dynamicSamplingContext", "traceContext", "envelope", "createCheckInEnvelope", "event", "span", "traceId", "spanId", "parentSpanId", "dsc", "getDynamicSamplingContextFromClient", "initAndBind", "clientClass", "options", "logger", "hub", "getCurrentHub", "client", "DEFAULT_TRANSPORT_BUFFER_SIZE", "createTransport", "options", "makeRequest", "buffer", "makePromiseBuffer", "rateLimits", "flush", "timeout", "send", "envelope", "filteredEnvelopeItems", "forEachEnvelopeItem", "item", "type", "envelopeItemDataCategory", "envelopeItemTypeToDataCategory", "isRateLimited", "event", "getEventForEnvelopeItem", "resolvedSyncPromise", "filteredEnvelope", "createEnvelope", "recordEnvelopeLoss", "reason", "requestTask", "serializeEnvelope", "response", "logger", "updateRateLimits", "error", "result", "SentryError", "MIN_DELAY", "START_DELAY", "MAX_DELAY", "log", "msg", "error", "logger", "makeOfflineTransport", "createTransport", "options", "transport", "store", "retryDelay", "flushTimer", "shouldQueue", "env", "envelopeContainsItemType", "flushIn", "delay", "found", "send", "e", "flushWithBackOff", "envelope", "result", "parseRetryAfterHeader", "t", "eventFromEnvelope", "env", "types", "event", "forEachEnvelopeItem", "item", "type", "makeOverrideReleaseTransport", "createTransport", "release", "options", "transport", "envelope", "timeout", "makeMultiplexedTransport", "matcher", "fallbackTransport", "otherTransports", "getTransport", "dsn", "key", "validatedDsn", "dsnFromString", "url", "getEnvelopeEndpointWithUrlEncodedAuth", "send", "getEvent", "eventTypes", "transports", "result", "t", "flush", "allTransports", "r", "SDK_VERSION", "originalFunctionToString", "FunctionToString", "_FunctionToString", "args", "context", "getOriginalFunction", "DEFAULT_IGNORE_ERRORS", "DEFAULT_IGNORE_TRANSACTIONS", "InboundFilters", "_InboundFilters", "options", "addGlobalEventProcessor", "getCurrentHub", "eventProcess", "event", "hub", "self", "client", "clientOptions", "_mergeOptions", "_shouldDropEvent", "internalOptions", "_isSentryError", "logger", "getEventDescription", "_isIgnoredError", "_isIgnoredTransaction", "_isDeniedUrl", "_getEventFilterUrl", "_isAllowedUrl", "ignoreErrors", "_getPossibleEventMessages", "message", "stringMatchesSomePattern", "ignoreTransactions", "name", "denyUrls", "url", "allowUrls", "possibleMessages", "lastException", "_getLastValidUrl", "frames", "i", "frame", "require_integrations", "__commonJSMin", "exports", "functiontostring", "inboundfilters", "filenameMetadataMap", "parsedStacks", "ensureMetadataStacksAreParsed", "parser", "GLOBAL_OBJ", "stack", "metadata", "frames", "frame", "getMetadataForUrl", "filename", "addMetadataToStackFrames", "event", "exception", "stripMetadataFromStackFrames", "ModuleMetadata", "_ModuleMetadata", "addGlobalEventProcessor", "getCurrentHub", "client", "envelope", "forEachEnvelopeItem", "item", "type", "event", "stripMetadataFromStackFrames", "stackParser", "addMetadataToStackFrames", "require_cjs", "__commonJSMin", "exports", "hubextensions", "idletransaction", "span", "transaction", "utils$1", "spanstatus", "trace", "dynamicSamplingContext", "measurement", "exports$1", "hub", "session", "sessionflusher", "scope", "api", "baseclient", "serverRuntimeClient", "sdk", "base", "offline", "multiplexed", "version", "integration", "index", "prepareEvent", "checkin", "hasTracingEnabled", "constants", "metadata", "functiontostring", "inboundfilters", "utils", "_nullishCoalesce", "lhs", "rhsFn", "_asyncNullishCoalesce", "lhs", "rhsFn", "_nullishCoalesce", "_asyncOptionalChain", "ops", "lastAccessLHS", "value", "i", "op", "fn", "args", "_asyncOptionalChainDelete", "ops", "result", "_asyncOptionalChain", "_optionalChain", "ops", "lastAccessLHS", "value", "i", "op", "fn", "args", "_optionalChainDelete", "ops", "result", "_optionalChain", "require_buildPolyfills", "__commonJSMin", "exports", "_asyncNullishCoalesce", "_asyncOptionalChain", "_asyncOptionalChainDelete", "_nullishCoalesce", "_optionalChain", "_optionalChainDelete", "shouldDisableAutoInstrumentation", "getCurrentHub", "clientOptions", "_optionalChain", "_", "_2", "_3", "_4", "_5", "_6", "Express", "_Express", "options", "_", "getCurrentHub", "logger", "shouldDisableAutoInstrumentation", "instrumentMiddlewares", "instrumentRouter", "wrap", "fn", "method", "arity", "req", "res", "transaction", "span", "next", "_optionalChain", "_2", "_3", "args", "_4", "_5", "err", "_6", "_7", "_8", "_9", "wrapMiddlewareArgs", "arg", "a", "patchMiddleware", "router", "originalCallback", "methods", "appOrRouter", "isApp", "routerProto", "originalProcessParams", "layer", "called", "done", "layerRoutePath", "isRegex", "isArray", "numExtraSegments", "getLayerRoutePathInfo", "finalPartialRoute", "segment", "urlLength", "getNumberOfUrlSegments", "routeLength", "stripUrlQueryAndFragment", "finalRoute", "extractPathForTransaction", "lrp", "_10", "_11", "isRegExp", "getNumberOfArrayUrlSegments", "getLayerRoutePathString", "routesArray", "accNumSegments", "currentRoute", "Postgres", "_Postgres", "options", "loadModule", "_", "getCurrentHub", "shouldDisableAutoInstrumentation", "logger", "pkg", "_optionalChain", "_2", "_3", "Client", "fill", "orig", "config", "values", "callback", "parentSpan", "data", "span", "_4", "_5", "err", "result", "_6", "_7", "_8", "_9", "rv", "isThenable", "res", "_10", "_11", "_12", "_13", "Mysql", "_Mysql", "loadModule", "_", "getCurrentHub", "shouldDisableAutoInstrumentation", "logger", "pkg", "mySqlConfig", "wrappingTarget", "thisArg", "args", "spanDataFromConfig", "finishSpan", "span", "data", "key", "fill", "orig", "options", "values", "callback", "parentSpan", "_optionalChain", "_2", "_3", "err", "result", "fields", "OPERATIONS", "OPERATION_SIGNATURES", "isCursor", "maybeCursor", "Mongo", "_Mongo", "options", "moduleName", "loadModule", "_", "getCurrentHub", "shouldDisableAutoInstrumentation", "logger", "pkg", "collection", "operations", "operation", "getSpanContext", "fill", "orig", "args", "lastArg", "parentSpan", "span", "_optionalChain", "_2", "_3", "maybePromiseOrCursor", "isThenable", "res", "_4", "_5", "cursor", "_6", "_7", "_8", "_9", "_10", "_11", "_12", "_13", "err", "result", "_14", "_15", "data", "spanContext", "signature", "shouldDescribe", "map", "reduce", "i", "isValidPrismaClient", "possibleClient", "Prisma", "_Prisma", "options", "addNonEnumerableProperty", "clientData", "engineConfig", "activeProvider", "clientVersion", "params", "next", "shouldDisableAutoInstrumentation", "getCurrentHub", "action", "model", "trace", "logger", "GraphQL", "_GraphQL", "loadModule", "_", "getCurrentHub", "shouldDisableAutoInstrumentation", "logger", "pkg", "fill", "orig", "args", "scope", "parentSpan", "span", "_optionalChain", "_2", "_3", "_4", "_5", "rv", "isThenable", "res", "_6", "_7", "_8", "_9", "_10", "_11", "_12", "_13", "Apollo", "_Apollo", "options", "loadModule", "_", "getCurrentHub", "shouldDisableAutoInstrumentation", "logger", "pkg", "fill", "orig", "args", "resolvers", "arrayify", "instrumentResolvers", "model", "resolverGroupName", "resolverName", "wrapResolver", "parentSpan", "span", "_optionalChain", "_2", "_3", "rv", "isThenable", "res", "_4", "_5", "_6", "_7", "lazyLoadedNodePerformanceMonitoringIntegrations", "integration", "dynamicRequire", "module", "WINDOW", "GLOBAL_OBJ", "registerBackgroundTabDetection", "WINDOW", "activeTransaction", "getActiveTransaction", "statusType", "logger", "bindReporter", "callback", "metric", "reportAllChanges", "prevValue", "delta", "forceReport", "generateUniqueID", "getNavigationEntryFromPerformanceTiming", "timing", "WINDOW", "type", "navigationEntry", "key", "getNavigationEntry", "getActivationStart", "navEntry", "getNavigationEntry", "initMetric", "name", "value", "navEntry", "getNavigationEntry", "navigationType", "WINDOW", "getActivationStart", "generateUniqueID", "observe", "type", "callback", "opts", "po", "list", "onHidden", "cb", "once", "onHiddenOrPageHide", "event", "WINDOW", "onCLS", "onReport", "metric", "initMetric", "report", "sessionValue", "sessionEntries", "handleEntries", "entries", "entry", "firstSessionEntry", "lastSessionEntry", "po", "observe", "bindReporter", "stopListening", "onHidden", "firstHiddenTime", "initHiddenTime", "WINDOW", "trackChanges", "onHidden", "timeStamp", "getVisibilityWatcher", "onFID", "onReport", "visibilityWatcher", "getVisibilityWatcher", "metric", "initMetric", "report", "handleEntry", "entry", "handleEntries", "entries", "po", "observe", "bindReporter", "onHidden", "reportedMetricIDs", "onLCP", "onReport", "visibilityWatcher", "getVisibilityWatcher", "metric", "initMetric", "report", "handleEntries", "entries", "lastEntry", "value", "getActivationStart", "po", "observe", "bindReporter", "stopListening", "type", "onHidden", "isMeasurementValue", "value", "_startChild", "transaction", "startTimestamp", "ctx", "msToSec", "time", "getBrowserPerformanceAPI", "WINDOW", "_performanceCursor", "_measurements", "_lcpEntry", "_clsEntry", "startTrackingWebVitals", "performance", "browserPerformanceTimeOrigin", "_trackFID", "clsCallback", "_trackCLS", "lcpCallback", "_trackLCP", "startTrackingLongTasks", "entryHandler", "entries", "entry", "transaction", "getActiveTransaction", "startTime", "duration", "observe", "startTrackingInteractions", "htmlTreeAsString", "onCLS", "metric", "logger", "onLCP", "onFID", "timeOrigin", "addPerformanceEntries", "performanceEntries", "responseStartTimestamp", "requestStartTimestamp", "_addNavigationSpans", "_addMeasureSpans", "firstHidden", "getVisibilityWatcher", "shouldRecord", "resourceName", "_addResourceSpans", "_trackNavigator", "name", "oldValue", "measurementTimestamp", "normalizedValue", "delta", "fidMark", "_startChild", "measurementName", "_tagMetricInfo", "measureStartTimestamp", "measureEndTimestamp", "event", "_addPerformanceNavigationTiming", "_addRequest", "description", "eventEnd", "end", "start", "data", "startTimestamp", "endTimestamp", "navigator", "connection", "isMeasurementValue", "source", "index", "DEFAULT_TRACE_PROPAGATION_TARGETS", "defaultRequestInstrumentationOptions", "instrumentOutgoingRequests", "_options", "traceFetch", "traceXHR", "tracePropagationTargets", "tracingOrigins", "shouldCreateSpanForRequest", "enableHTTPTimings", "shouldCreateSpan", "_", "shouldAttachHeadersWithTargets", "url", "shouldAttachHeaders", "spans", "addInstrumentationHandler", "handlerData", "createdSpan", "fetchCallback", "addHTTPTimings", "xhrCallback", "isPerformanceResourceTiming", "entry", "span", "observer", "list", "resourceTimingEntryToSpanData", "data", "extractNetworkProtocol", "nextHopProtocol", "name", "version", "_name", "char", "getAbsoluteTime", "time", "browserPerformanceTimeOrigin", "resourceTiming", "timingSpanData", "stringMatchesSomePattern", "hasTracingEnabled", "shouldCreateSpanResult", "spanId", "contentLength", "contentLengthNum", "hub", "getCurrentHub", "scope", "client", "parentSpan", "method", "request", "options", "addTracingHeadersToFetchRequest", "requestSpan", "transaction", "traceId", "sampled", "dsc", "sentryTraceHeader", "generateSentryTraceHeader", "dynamicSamplingContext", "getDynamicSamplingContextFromClient", "sentryBaggageHeader", "dynamicSamplingContextToSentryBaggageHeader", "headers", "isInstanceOf", "newHeaders", "BAGGAGE_HEADER_NAME", "existingBaggageHeader", "newBaggageHeaders", "xhr", "sentryXhrData", "SENTRY_XHR_DATA_KEY", "setHeaderOnXhr", "instrumentRoutingWithDefaults", "customStartTransaction", "startTransactionOnPageLoad", "startTransactionOnLocationChange", "WINDOW", "logger", "startingUrl", "activeTransaction", "browserPerformanceTimeOrigin", "addInstrumentationHandler", "to", "from", "BROWSER_TRACING_INTEGRATION_ID", "DEFAULT_BROWSER_TRACING_OPTIONS", "TRACING_DEFAULTS", "instrumentRoutingWithDefaults", "defaultRequestInstrumentationOptions", "BrowserTracing", "_options", "addTracingExtensions", "startTrackingWebVitals", "startTrackingLongTasks", "startTrackingInteractions", "_", "getCurrentHub", "client", "clientOptions", "instrumentRouting", "startTransactionOnLocationChange", "startTransactionOnPageLoad", "markBackgroundTransactions", "traceFetch", "traceXHR", "shouldCreateSpanForRequest", "enableHTTPTimings", "_experiments", "clientOptionsTracePropagationTargets", "tracePropagationTargets", "logger", "context", "transaction", "registerBackgroundTabDetection", "instrumentOutgoingRequests", "hub", "beforeNavigate", "idleTimeout", "finalTimeout", "heartbeatInterval", "isPageloadTransaction", "sentryTrace", "getMetaContent", "baggage", "traceparentData", "dynamicSamplingContext", "propagationContext", "tracingContextFromHeaders", "expandedContext", "modifiedContext", "finalContext", "location", "WINDOW", "idleTransaction", "startIdleTransaction", "scope", "addPerformanceEntries", "inflightInteractionTransaction", "registerInteractionTransaction", "op", "currentTransaction", "getActiveTransaction", "type", "metaName", "metaTag", "getDomElement", "_autoloadDatabaseIntegrations", "carrier", "getMainCarrier", "packageToIntegrationMapping", "integration", "dynamicRequire", "module", "mappedPackages", "moduleName", "loadModule", "pkg", "p", "addExtensionMethods", "addTracingExtensions", "isNodeEnv", "require_cjs", "__commonJSMin", "exports", "core", "utils", "express", "postgres", "mysql", "mongo", "prisma", "graphql", "apollo", "lazy", "browsertracing", "request", "extensions", "autoDiscoverNodePerformanceMonitoringIntegrations", "loadedIntegrations", "lazyLoadedNodePerformanceMonitoringIntegrations", "tryLoad", "integration", "logger", "parseStackFrames", "stackParser", "error", "exceptionFromError", "exception", "frames", "eventFromUnknownInput", "hint", "ex", "mechanism", "isError", "isPlainObject", "message", "extractExceptionKeysForMessage", "hub", "getCurrentHub", "client", "normalizeDepth", "scope", "normalizeToSize", "event", "addExceptionTypeValue", "addExceptionMechanism", "eventFromMessage", "level", "attachStacktrace", "NodeClient", "BaseClient", "options", "SDK_VERSION", "TextEncoder", "addTracingExtensions", "exception", "hint", "scope", "requestSession", "event", "timeout", "_optionalChain", "_", "_2", "_3", "release", "environment", "SessionFlusher", "logger", "resolvedSyncPromise", "eventFromUnknownInput", "message", "level", "eventFromMessage", "checkIn", "monitorConfig", "id", "uuid4", "tunnel", "serializedCheckIn", "dynamicSamplingContext", "traceContext", "envelope", "createCheckInEnvelope", "_4", "_5", "os", "span", "_6", "_7", "_8", "_9", "_10", "traceId", "spanId", "parentSpanId", "dsc", "getDynamicSamplingContextFromClient", "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", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "ns", "matchesTemplate", "search", "template", "searchIndex", "templateIndex", "starIndex", "matchIndex", "name", "skip", "require_browser", "__commonJSMin", "exports", "module", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "m", "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", "flagForceColor", "envForceColor", "translateLevel", "level", "supportsColor", "haveStream", "streamIsTTY", "sniffFlags", "noFlagForceColor", "forceColor", "min", "osRelease", "sign", "version", "getSupportLevel", "stream", "options", "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", "GZIP_THRESHOLD", "streamFromBody", "body", "Readable", "makeNodeTransport", "options", "urlSegments", "URL", "createTransport", "isHttps", "proxy", "applyNoProxyOption", "nativeHttpModule", "https", "http", "keepAlive", "agent", "HttpsProxyAgent", "requestExecutor", "createRequestExecutor", "_nullishCoalesce", "transportUrlSegments", "no_proxy", "exemption", "httpModule", "hostname", "pathname", "port", "protocol", "search", "request", "resolve", "reject", "headers", "createGzip", "req", "res", "retryAfterHeader", "rateLimitsHeader", "NODE_VERSION", "parseSemver", "getActiveDomain", "domain", "getCurrentHub", "activeDomain", "ensureHubOnCarrier", "getHubFromCarrier", "createNewHub", "parent", "carrier", "runWithAsyncContext", "callback", "options", "_optionalChain", "_", "local", "parentHub", "newHub", "setHubOnCarrier", "setDomainAsyncContextStrategy", "setAsyncContextStrategy", "asyncStorage", "setHooksAsyncContextStrategy", "async_hooks", "getCurrentHub", "createNewHub", "parent", "carrier", "ensureHubOnCarrier", "getHubFromCarrier", "runWithAsyncContext", "callback", "options", "existingHub", "_optionalChain", "_", "newHub", "setAsyncContextStrategy", "setNodeAsyncContextStrategy", "NODE_VERSION", "setHooksAsyncContextStrategy", "setDomainAsyncContextStrategy", "Console", "_Console", "addInstrumentationHandler", "args", "level", "hub", "getCurrentHub", "severityLevelFromString", "util", "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", "isSentryRequest", "url", "dsn", "_optionalChain", "getCurrentHub", "_", "_2", "_3", "_4", "_5", "extractRawUrl", "requestOptions", "protocol", "hostname", "port", "path", "extractUrl", "authority", "redactAuthority", "auth", "user", "password", "cleanSpanDescription", "description", "request", "method", "requestUrl", "_6", "_7", "_8", "_9", "urlToOptions", "options", "normalizeRequestArgs", "httpModule", "requestArgs", "callback", "URL", "NODE_VERSION", "_10", "_11", "_12", "_13", "_14", "_15", "_16", "_17", "Http", "_Http", "options", "_addGlobalEventProcessor", "setupOnceGetCurrentHub", "clientOptions", "_optionalChain", "_", "_2", "_3", "_4", "_5", "logger", "shouldCreateSpanForRequest", "_6", "_7", "_8", "tracePropagationTargets", "_9", "_10", "_11", "httpModule", "wrappedHttpHandlerMaker", "_createWrappedRequestMethodFactory", "fill", "NODE_VERSION", "httpsModule", "wrappedHttpsHandlerMaker", "breadcrumbsEnabled", "createSpanUrlMap", "LRUMap", "headersUrlMap", "shouldCreateSpan", "url", "cachedDecision", "decision", "shouldAttachTraceData", "stringMatchesSomePattern", "addRequestBreadcrumb", "event", "requestSpanData", "req", "res", "getCurrentHub", "originalRequestMethod", "args", "requestArgs", "normalizeRequestArgs", "requestOptions", "rawRequestUrl", "extractRawUrl", "requestUrl", "extractUrl", "isSentryRequest", "hub", "scope", "parentSpan", "data", "getRequestSpanData", "requestSpan", "_12", "_13", "sentryTraceHeader", "dynamicSamplingContext", "_14", "_15", "_16", "addHeadersToRequestOptions", "client", "traceId", "sampled", "dsc", "generateSentryTraceHeader", "getDynamicSamplingContextFromClient", "cleanSpanDescription", "sentryBaggage", "dynamicSamplingContextToSentryBaggageHeader", "sentryBaggageHeader", "normalizeBaggageHeader", "method", "DEFAULT_SHUTDOWN_TIMEOUT", "logAndExitProcess", "error", "client", "getCurrentHub", "logger", "options", "timeout", "result", "OnUncaughtException", "_OnUncaughtException", "options", "caughtFirstError", "caughtSecondError", "calledFatalError", "firstError", "error", "onFatalError", "logAndExitProcess", "client", "getCurrentHub", "processWouldExit", "acc", "listener", "shouldApplyFatalHandlingLogic", "logger", "hub", "scope", "OnUnhandledRejection", "_OnUnhandledRejection", "_options", "reason", "promise", "hub", "getCurrentHub", "scope", "rejectionWarning", "consoleSandbox", "logAndExitProcess", "DEFAULT_KEY", "DEFAULT_LIMIT", "LinkedErrors", "_LinkedErrors", "options", "event", "hint", "client", "applyAggregateErrorsToEvent", "exceptionFromError", "moduleCache", "getPaths", "collectModules", "mainPaths", "paths", "infos", "seen", "path", "dir", "updir", "orig", "dirname", "pkgfile", "join", "existsSync", "info", "readFileSync", "Modules", "_Modules", "addGlobalEventProcessor", "getCurrentHub", "event", "FILE_CONTENT_CACHE", "LRUMap", "DEFAULT_LINES_OF_CONTEXT", "readTextFileAsync", "path", "resolve", "reject", "readFile", "err", "data", "ContextLines", "_ContextLines", "_options", "addGlobalEventProcessor", "getCurrentHub", "event", "enqueuedReadSourceFileTasks", "readSourceFileTasks", "_optionalChain", "_2", "_3", "exception", "_4", "_5", "i", "frame", "_readSourceFile", "_6", "_7", "frames", "sourceFileLines", "addContextToFrame", "filename", "cachedFile", "content", "readFileAsync", "promisify", "readFile", "readDirAsync", "readdir", "Context", "_Context", "_options", "addGlobalEventProcessor", "event", "updatedContext", "_optionalChain", "_", "_2", "_3", "_4", "_5", "_6", "_7", "_8", "_9", "_10", "contexts", "_11", "_12", "_13", "_14", "os", "getOsContext", "getAppContext", "getDeviceContext", "culture", "getCultureContext", "getCloudResourceContext", "platformId", "getDarwinInfo", "getLinuxInfo", "PLATFORM_NAMES", "january", "options", "app_memory", "deviceOpt", "device", "uptime", "cpuInfo", "firstCpu", "LINUX_DISTROS", "LINUX_VERSIONS", "content", "matchFirst", "regex", "text", "match", "darwinInfo", "output", "resolve", "reject", "execFile", "error", "stdout", "getLinuxDistroId", "name", "linuxInfo", "etcFiles", "distroFile", "file", "distroPath", "join", "contents", "distros", "d", "id", "require_cookie", "__commonJSMin", "exports", "parse", "serialize", "decode", "encode", "fieldContentRegExp", "str", "options", "obj", "opt", "pairs", "dec", "i", "pair", "index", "key", "val", "tryDecode", "name", "enc", "value", "maxAge", "sameSite", "DEFAULT_INCLUDES", "DEFAULT_REQUEST_INCLUDES", "DEFAULT_USER_INCLUDES", "extractPathForTransaction", "req", "options", "method", "path", "source", "stripUrlQueryAndFragment", "name", "extractTransaction", "type", "extractUserData", "user", "keys", "extractedUser", "key", "extractRequestData", "include", "requestData", "headers", "host", "protocol", "originalUrl", "absoluteUrl", "cookie", "extractQueryParams", "isString", "normalize", "addRequestDataToEvent", "event", "_optionalChain", "_", "extractedRequestData", "isPlainObject", "ip", "url", "DEFAULT_OPTIONS", "RequestData", "_RequestData", "options", "addRequestDataToEvent", "addGlobalEventProcessor", "getCurrentHub", "transactionNamingScheme", "event", "hub", "self", "sdkProcessingMetadata", "req", "addRequestDataOptions", "convertReqDataIntegrationOptsToAddReqDataOpts", "processedEvent", "transaction", "shouldIncludeMethodInTransactionName", "getSDKName", "transactionValue", "extractPathForTransaction", "integrationOptions", "ip", "user", "requestOptions", "requestIncludeKeys", "key", "value", "addReqDataUserOpt", "userIncludeKeys", "createCallbackList", "complete", "callbacks", "completedCalled", "checkedComplete", "result", "add", "fn", "next", "popped", "AsyncSession", "Session", "onPause", "captureAll", "event", "objectId", "props", "prop", "_optionalChain", "_2", "_3", "_4", "_5", "id", "vars", "_6", "_7", "_8", "_9", "_10", "_11", "_12", "_13", "err", "params", "name", "v", "a", "b", "_14", "_15", "_16", "_17", "obj", "key", "val", "_18", "_19", "_20", "_21", "_22", "_23", "tryNewAsyncSession", "isAnonymous", "functionNamesMatch", "hashFrames", "frames", "acc", "frame", "hashFromStack", "stackParser", "stack", "LocalVariables", "_LocalVariables", "LRUMap", "_options", "_session", "addGlobalEventProcessor", "getCurrentHub", "_24", "_25", "_26", "_27", "_28", "clientOptions", "_29", "NODE_VERSION", "logger", "ev", "reason", "data", "callFrames", "exceptionHash", "_30", "i", "scopeChain", "functionName", "localScope", "scope", "_31", "_32", "_33", "_34", "_35", "exception", "_36", "_37", "hash", "_38", "_39", "cachedFrames", "frameCount", "_40", "_41", "_42", "frameIndex", "_43", "_44", "_45", "ChannelName", "RequestCreate", "RequestEnd", "RequestError", "Undici", "_Undici", "LRUMap", "_options", "_addGlobalEventProcessor", "NODE_VERSION", "ds", "dynamicRequire", "module", "url", "cachedDecision", "decision", "message", "hub", "getCurrentHub", "request", "stringUrl", "isSentryRequest", "client", "clientOptions", "scope", "parentSpan", "span", "createRequestSpan", "stringMatchesSomePattern", "dynamicSamplingContext", "_optionalChain", "_4", "_5", "_6", "sentryBaggageHeader", "dynamicSamplingContextToSentryBaggageHeader", "setHeadersOnRequest", "traceId", "sampled", "dsc", "sentryTrace", "generateSentryTraceHeader", "getDynamicSamplingContextFromClient", "response", "activeSpan", "parseUrl", "method", "data", "_7", "_8", "getSanitizedUrlString", "isWindowsPlatform", "sep", "normalizeWindowsPath", "path", "getModuleFromFilename", "filename", "normalizeWindowsPathSeparator", "normalizedFilename", "root", "dir", "basename", "ext", "posix", "normalizedBase", "file", "n", "moduleName", "defaultIntegrations", "CoreIntegrations", "Console", "Http", "Undici", "OnUncaughtException", "OnUnhandledRejection", "ContextLines", "LocalVariables", "Context", "Modules", "RequestData", "LinkedErrors", "init", "options", "carrier", "getMainCarrier", "setNodeAsyncContextStrategy", "autoloadedIntegrations", "_optionalChain", "_", "_2", "sentryTracesSampleRate", "tracesSampleRate", "detectedRelease", "getSentryRelease", "clientOptions", "stackParserFromStackParserOptions", "defaultStackParser", "getIntegrationsToSetup", "makeNodeTransport", "initAndBind", "NodeClient", "startSessionTracking", "updateScopeFromEnvVariables", "isAutoSessionTrackingEnabled", "client", "fallback", "GLOBAL_OBJ", "createStackParser", "nodeStackLineParser", "getModuleFromFilename", "hub", "getCurrentHub", "session", "sentryUseEnvironment", "sentryTraceEnv", "baggageEnv", "propagationContext", "tracingContextFromHeaders", "deepReadDirSync", "targetDir", "targetDirAbsPath", "path", "fs", "deepReadCurrentDir", "currentDirAbsPath", "absPaths", "itemName", "itemAbsPath", "absPath", "extractRequestData", "req", "keys", "_extractRequestData", "parseRequest", "event", "options", "addRequestDataToEvent", "tracingHandler", "req", "res", "next", "hub", "getCurrentHub", "options", "_optionalChain", "_", "_2", "_3", "_4", "_5", "_6", "_7", "_8", "_9", "_10", "sentryTrace", "isString", "baggage", "_11", "_12", "traceparentData", "dynamicSamplingContext", "propagationContext", "tracingContextFromHeaders", "hasTracingEnabled", "name", "source", "extractPathForTransaction", "transaction", "startTransaction", "extractRequestData", "scope", "addRequestDataToTransaction", "convertReqHandlerOptsToAddReqDataOpts", "reqHandlerOptions", "addRequestDataOptions", "ip", "request", "user", "dropUndefinedKeys", "requestHandler", "requestDataOptions", "currentHub", "client", "isAutoSessionTrackingEnabled", "_end", "chunk", "encoding", "cb", "flush", "e", "logger", "runWithAsyncContext", "getStatusCodeFromResponse", "error", "statusCode", "defaultShouldHandleError", "errorHandler", "_req", "withScope", "_scope", "requestSession", "event", "addExceptionMechanism", "eventId", "captureException", "trpcMiddleware", "path", "type", "rawInput", "clientOptions", "_13", "_14", "_15", "_16", "sentryTransaction", "trpcContext", "_17", "normalize", "require_integrations", "__commonJSMin", "exports", "console", "http", "onuncaughtexception", "onunhandledrejection", "linkederrors", "modules", "contextlines", "context", "requestdata", "localvariables", "index", "require_integrations", "__commonJSMin", "exports", "tracing", "INTEGRATIONS", "CoreIntegrations", "NodeIntegrations", "TracingIntegrations", "require_which_pm_runs", "__commonJSMin", "exports", "module", "pmFromUserAgent", "userAgent", "pmSpec", "separatorPos", "name", "require_unicode", "__commonJSMin", "exports", "module", "require_util", "__commonJSMin", "exports", "module", "unicode", "c", "require_parse", "__commonJSMin", "exports", "module", "util", "source", "parseState", "stack", "pos", "line", "column", "token", "key", "root", "text", "reviver", "lex", "parseStates", "internalize", "holder", "name", "value", "replacement", "lexState", "buffer", "doubleQuote", "sign", "c", "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", "require_stringify", "__commonJSMin", "exports", "module", "util", "value", "replacer", "space", "stack", "indent", "propertyList", "replacerFunc", "gap", "quote", "v", "item", "serializeProperty", "key", "holder", "quoteString", "serializeArray", "serializeObject", "quotes", "replacements", "product", "i", "c", "hexString", "quoteChar", "a", "b", "stepback", "keys", "partial", "propertyString", "member", "serializeKey", "final", "properties", "separator", "firstChar", "require_lib", "__commonJSMin", "exports", "module", "parse", "stringify", "JSON5", "require_debug", "__commonJSMin", "exports", "getType", "o", "throwUnknownDataType", "require_number", "__commonJSMin", "exports", "i_to_s", "i", "c", "N", "s_to_i", "s", "s_to_int", "acc", "pow", "x", "s_to_big_int", "int_to_s", "int", "big_int_to_s", "zero", "n", "reverse", "num_to_s", "num", "a", "b", "int_str_to_s", "str", "int_str", "s_to_int_str", "s_to_num", "neg", "require_encode", "__commonJSMin", "exports", "number_1", "encodeNum", "num", "decodeNum", "s", "decodeKey", "key", "encodeBool", "b", "decodeBool", "encodeStr", "str", "decodeStr", "require_config", "__commonJSMin", "exports", "require_memory", "__commonJSMin", "exports", "config_1", "debug_1", "encode_1", "number_1", "memToValues", "mem", "makeInMemoryStore", "cb", "i", "value", "makeInMemoryCache", "valueMem", "schemaMem", "key", "makeInMemoryMemory", "getValueKey", "id", "getSchema", "keys", "schema", "key_id", "addValue", "o", "parent", "acc", "v", "require_core", "__commonJSMin", "exports", "debug_1", "encode_1", "memory_1", "compress", "o", "mem", "root", "decodeObject", "values", "s", "vs", "key_id", "keys", "decode", "n", "i", "k", "v", "decodeArray", "xs", "key", "id", "decompress", "c", "require_helpers", "__commonJSMin", "exports", "trimUndefined", "object", "key", "trimUndefinedRecursively", "trimUndefinedRecursivelyLoop", "tracks", "value", "require_dist", "__commonJSMin", "exports", "core_1", "core_2", "memory_1", "helpers_1", "require_kleur", "__commonJSMin", "exports", "module", "FORCE_COLOR", "NODE_DISABLE_COLORS", "TERM", "$", "init", "run", "arr", "str", "i", "tmp", "beg", "end", "chain", "has", "keys", "ctx", "open", "close", "blk", "txt", "require_action", "__commonJSMin", "exports", "module", "key", "isSelect", "require_strip", "__commonJSMin", "exports", "module", "str", "pattern", "RGX", "require_clear", "__commonJSMin", "exports", "module", "_createForOfIteratorHelper", "o", "allowArrayLike", "it", "_unsupportedIterableToArray", "i", "F", "_e", "normalCompletion", "didErr", "err", "step", "_e2", "minLen", "_arrayLikeToArray", "n", "arr", "len", "arr2", "strip", "_require", "erase", "cursor", "width", "str", "prompt", "perLine", "rows", "lines", "_iterator", "_step", "line", "require_figures", "__commonJSMin", "exports", "module", "main", "win", "figures", "require_style", "__commonJSMin", "exports", "module", "c", "figures", "styles", "input", "render", "type", "symbols", "symbol", "done", "aborted", "exited", "delimiter", "completing", "item", "expandable", "expanded", "require_lines", "__commonJSMin", "exports", "module", "strip", "msg", "perLine", "lines", "l", "a", "b", "require_wrap", "__commonJSMin", "exports", "module", "msg", "opts", "tab", "width", "line", "arr", "w", "require_entriesToDisplay", "__commonJSMin", "exports", "module", "cursor", "total", "maxVisible", "startIndex", "endIndex", "require_util", "__commonJSMin", "exports", "module", "require_prompt", "__commonJSMin", "exports", "module", "readline", "_require", "action", "EventEmitter", "_require2", "beep", "cursor", "color", "Prompt", "opts", "rl", "isSelect", "keypress", "str", "key", "require_text", "__commonJSMin", "exports", "module", "asyncGeneratorStep", "gen", "resolve", "reject", "_next", "_throw", "key", "arg", "info", "value", "error", "_asyncToGenerator", "fn", "self", "args", "err", "color", "Prompt", "_require", "erase", "cursor", "_require2", "style", "clear", "lines", "figures", "TextPrompt", "opts", "v", "_this", "valid", "_this2", "n", "c", "s1", "s2", "a", "l", "i", "require_select", "__commonJSMin", "exports", "module", "color", "Prompt", "_require", "style", "clear", "figures", "wrap", "entriesToDisplay", "_require2", "cursor", "SelectPrompt", "opts", "ch", "idx", "n", "c", "key", "_entriesToDisplay", "startIndex", "endIndex", "title", "prefix", "desc", "v", "require_toggle", "__commonJSMin", "exports", "module", "color", "Prompt", "_require", "style", "clear", "_require2", "cursor", "erase", "TogglePrompt", "opts", "c", "key", "require_datepart", "__commonJSMin", "exports", "module", "DatePart", "_DatePart", "token", "date", "parts", "locales", "currentIdx", "part", "idx", "val", "require_meridiem", "__commonJSMin", "exports", "module", "DatePart", "Meridiem", "opts", "meridiem", "require_day", "__commonJSMin", "exports", "module", "DatePart", "pos", "n", "Day", "opts", "val", "date", "day", "require_hours", "__commonJSMin", "exports", "module", "DatePart", "Hours", "opts", "val", "hours", "require_milliseconds", "__commonJSMin", "exports", "module", "DatePart", "Milliseconds", "opts", "val", "require_minutes", "__commonJSMin", "exports", "module", "DatePart", "Minutes", "opts", "val", "m", "require_month", "__commonJSMin", "exports", "module", "DatePart", "Month", "opts", "val", "month", "tl", "require_seconds", "__commonJSMin", "exports", "module", "DatePart", "Seconds", "opts", "val", "s", "require_year", "__commonJSMin", "exports", "module", "DatePart", "Year", "opts", "val", "year", "require_dateparts", "__commonJSMin", "exports", "module", "require_date", "__commonJSMin", "exports", "module", "asyncGeneratorStep", "gen", "resolve", "reject", "_next", "_throw", "key", "arg", "info", "value", "error", "_asyncToGenerator", "fn", "self", "args", "err", "color", "Prompt", "_require", "style", "clear", "figures", "_require2", "erase", "cursor", "_require3", "DatePart", "Meridiem", "Day", "Hours", "Milliseconds", "Minutes", "Month", "Seconds", "Year", "regex", "regexGroups", "token", "opts", "dfltLocales", "DatePrompt", "date", "mask", "result", "match", "idx", "gr", "parts", "arr", "i", "n", "p", "_this", "valid", "_this2", "prev", "next", "part", "c", "a", "l", "require_number", "__commonJSMin", "exports", "module", "asyncGeneratorStep", "gen", "resolve", "reject", "_next", "_throw", "key", "arg", "info", "value", "error", "_asyncToGenerator", "fn", "self", "args", "err", "color", "Prompt", "_require", "cursor", "erase", "_require2", "style", "figures", "clear", "lines", "isNumber", "isDef", "any", "round", "number", "precision", "factor", "NumberPrompt", "opts", "v", "x", "c", "_this", "valid", "_this2", "val", "now", "a", "l", "i", "require_multiselect", "__commonJSMin", "exports", "module", "color", "_require", "cursor", "Prompt", "_require2", "clear", "figures", "style", "wrap", "entriesToDisplay", "MultiselectPrompt", "opts", "ch", "idx", "v", "selected", "e", "newSelected", "c", "key", "i", "arrowIndicator", "prefix", "title", "desc", "options", "_entriesToDisplay", "startIndex", "endIndex", "styledOptions", "output", "prompt", "require_autocomplete", "__commonJSMin", "exports", "module", "asyncGeneratorStep", "gen", "resolve", "reject", "_next", "_throw", "key", "arg", "info", "value", "error", "_asyncToGenerator", "fn", "self", "args", "err", "color", "Prompt", "_require", "erase", "cursor", "_require2", "style", "clear", "figures", "wrap", "entriesToDisplay", "getVal", "arr", "i", "getTitle", "getIndex", "valOrTitle", "index", "el", "AutocompletePrompt", "opts", "fb", "choice", "cb", "_this", "p", "suggestions", "s", "l", "c", "s1", "s2", "v", "hovered", "isStart", "isEnd", "desc", "prefix", "title", "_entriesToDisplay", "startIndex", "endIndex", "item", "require_autocompleteMultiselect", "__commonJSMin", "exports", "module", "color", "_require", "cursor", "MultiselectPrompt", "_require2", "clear", "style", "figures", "AutocompleteMultiselectPrompt", "opts", "currentHighlight", "v", "newHighlightIndex", "e", "c", "key", "i", "title", "output", "prompt", "require_confirm", "__commonJSMin", "exports", "module", "color", "Prompt", "_require", "style", "clear", "_require2", "erase", "cursor", "ConfirmPrompt", "opts", "c", "key", "require_elements", "__commonJSMin", "exports", "module", "require_prompts", "__commonJSMin", "exports", "$", "el", "noop", "v", "toPrompt", "type", "args", "opts", "res", "rej", "p", "onAbort", "onSubmit", "onExit", "x", "sep", "str", "s", "toSelected", "items", "item", "byTitle", "input", "choices", "require_dist", "__commonJSMin", "exports", "module", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_createForOfIteratorHelper", "o", "allowArrayLike", "it", "_unsupportedIterableToArray", "F", "_e", "normalCompletion", "didErr", "err", "step", "_e2", "minLen", "_arrayLikeToArray", "n", "arr", "len", "arr2", "asyncGeneratorStep", "gen", "resolve", "reject", "_next", "_throw", "arg", "info", "error", "_asyncToGenerator", "fn", "self", "args", "prompts", "passOn", "noop", "prompt", "_prompt", "questions", "onSubmit", "onCancel", "answers", "override", "answer", "question", "quit", "name", "type", "lastPrompt", "getFormattedAnswer", "_ref", "skipValidation", "_x", "_x2", "_iterator", "_step", "_question", "_question2", "getInjectedAnswer", "injected", "deafultValue", "inject", "require_action", "__commonJSMin", "exports", "module", "key", "isSelect", "require_strip", "__commonJSMin", "exports", "module", "str", "pattern", "RGX", "require_clear", "__commonJSMin", "exports", "module", "strip", "erase", "cursor", "width", "str", "prompt", "perLine", "rows", "lines", "line", "require_figures", "__commonJSMin", "exports", "module", "main", "win", "figures", "require_style", "__commonJSMin", "exports", "module", "c", "figures", "styles", "input", "render", "type", "symbols", "symbol", "done", "aborted", "exited", "delimiter", "completing", "item", "expandable", "expanded", "require_lines", "__commonJSMin", "exports", "module", "strip", "msg", "perLine", "lines", "l", "a", "b", "require_wrap", "__commonJSMin", "exports", "module", "msg", "opts", "tab", "width", "line", "arr", "w", "require_entriesToDisplay", "__commonJSMin", "exports", "module", "cursor", "total", "maxVisible", "startIndex", "endIndex", "require_util", "__commonJSMin", "exports", "module", "require_prompt", "__commonJSMin", "exports", "module", "readline", "action", "EventEmitter", "beep", "cursor", "color", "Prompt", "opts", "rl", "isSelect", "keypress", "str", "key", "require_text", "__commonJSMin", "exports", "module", "color", "Prompt", "erase", "cursor", "style", "clear", "lines", "figures", "TextPrompt", "opts", "v", "valid", "n", "c", "key", "s1", "s2", "a", "l", "i", "require_select", "__commonJSMin", "exports", "module", "color", "Prompt", "style", "clear", "figures", "wrap", "entriesToDisplay", "cursor", "SelectPrompt", "opts", "ch", "idx", "n", "c", "key", "startIndex", "endIndex", "i", "title", "prefix", "desc", "v", "require_toggle", "__commonJSMin", "exports", "module", "color", "Prompt", "style", "clear", "cursor", "erase", "TogglePrompt", "opts", "c", "key", "require_datepart", "__commonJSMin", "exports", "module", "DatePart", "_DatePart", "token", "date", "parts", "locales", "currentIdx", "part", "idx", "val", "require_meridiem", "__commonJSMin", "exports", "module", "DatePart", "Meridiem", "opts", "meridiem", "require_day", "__commonJSMin", "exports", "module", "DatePart", "pos", "n", "Day", "opts", "val", "date", "day", "require_hours", "__commonJSMin", "exports", "module", "DatePart", "Hours", "opts", "val", "hours", "require_milliseconds", "__commonJSMin", "exports", "module", "DatePart", "Milliseconds", "opts", "val", "require_minutes", "__commonJSMin", "exports", "module", "DatePart", "Minutes", "opts", "val", "m", "require_month", "__commonJSMin", "exports", "module", "DatePart", "Month", "opts", "val", "month", "tl", "require_seconds", "__commonJSMin", "exports", "module", "DatePart", "Seconds", "opts", "val", "s", "require_year", "__commonJSMin", "exports", "module", "DatePart", "Year", "opts", "val", "year", "require_dateparts", "__commonJSMin", "exports", "module", "require_date", "__commonJSMin", "exports", "module", "color", "Prompt", "style", "clear", "figures", "erase", "cursor", "DatePart", "Meridiem", "Day", "Hours", "Milliseconds", "Minutes", "Month", "Seconds", "Year", "regex", "regexGroups", "token", "opts", "dfltLocales", "DatePrompt", "date", "mask", "result", "match", "idx", "gr", "parts", "arr", "i", "n", "p", "valid", "prev", "next", "part", "c", "a", "l", "require_number", "__commonJSMin", "exports", "module", "color", "Prompt", "cursor", "erase", "style", "figures", "clear", "lines", "isNumber", "isDef", "any", "round", "number", "precision", "factor", "NumberPrompt", "opts", "v", "x", "c", "valid", "val", "key", "now", "a", "l", "i", "require_multiselect", "__commonJSMin", "exports", "module", "color", "cursor", "Prompt", "clear", "figures", "style", "wrap", "entriesToDisplay", "MultiselectPrompt", "opts", "ch", "idx", "v", "selected", "e", "newSelected", "c", "key", "i", "arrowIndicator", "prefix", "title", "desc", "options", "startIndex", "endIndex", "styledOptions", "output", "prompt", "require_autocomplete", "__commonJSMin", "exports", "module", "color", "Prompt", "erase", "cursor", "style", "clear", "figures", "wrap", "entriesToDisplay", "getVal", "arr", "i", "getTitle", "getIndex", "valOrTitle", "index", "el", "AutocompletePrompt", "opts", "fb", "choice", "cb", "p", "suggestions", "l", "c", "key", "s1", "s2", "v", "hovered", "isStart", "isEnd", "desc", "prefix", "title", "startIndex", "endIndex", "item", "require_autocompleteMultiselect", "__commonJSMin", "exports", "module", "color", "cursor", "MultiselectPrompt", "clear", "style", "figures", "AutocompleteMultiselectPrompt", "opts", "currentHighlight", "v", "newHighlightIndex", "e", "c", "key", "i", "title", "output", "prompt", "require_confirm", "__commonJSMin", "exports", "module", "color", "Prompt", "style", "clear", "erase", "cursor", "ConfirmPrompt", "opts", "c", "key", "require_elements", "__commonJSMin", "exports", "module", "require_prompts", "__commonJSMin", "exports", "$", "el", "noop", "v", "toPrompt", "type", "args", "opts", "res", "rej", "p", "onAbort", "onSubmit", "onExit", "x", "sep", "str", "s", "toSelected", "items", "item", "byTitle", "input", "choices", "require_lib", "__commonJSMin", "exports", "module", "prompts", "passOn", "noop", "prompt", "questions", "onSubmit", "onCancel", "answers", "override", "answer", "question", "quit", "name", "type", "lastPrompt", "getFormattedAnswer", "skipValidation", "key", "value", "getInjectedAnswer", "injected", "deafultValue", "inject", "require_prompts", "__commonJSMin", "exports", "module", "isNodeLT", "tar", "i", "src", "require_core", "__commonJSMin", "exports", "module", "deepFreeze", "obj", "name", "prop", "type", "Response", "mode", "escapeHTML", "value", "inherit$1", "original", "objects", "result", "key", "SPAN_CLOSE", "emitsWrappingTags", "node", "scopeToCSSClass", "prefix", "pieces", "x", "HTMLRenderer", "parseTree", "options", "text", "className", "newNode", "opts", "TokenTree", "_TokenTree", "scope", "khulnasoft", "child", "el", "TokenTreeEmitter", "emitter", "source", "re", "lookahead", "concat", "anyNumberOfTimes", "optional", "args", "stripOptionsFromArgs", "either", "countMatchGroups", "startsWith", "lexeme", "match", "BACKREF_RE", "_rewriteBackreferences", "regexps", "joinWith", "numCaptures", "regex", "offset", "out", "MATCH_NOTHING_RE", "IDENT_RE", "UNDERSCORE_IDENT_RE", "NUMBER_RE", "C_NUMBER_RE", "BINARY_NUMBER_RE", "RE_STARTERS_RE", "SHEBANG", "beginShebang", "m", "resp", "BACKSLASH_ESCAPE", "APOS_STRING_MODE", "QUOTE_STRING_MODE", "PHRASAL_WORDS_MODE", "COMMENT", "begin", "end", "modeOptions", "ENGLISH_WORD", "C_LINE_COMMENT_MODE", "C_BLOCK_COMMENT_MODE", "HASH_COMMENT_MODE", "NUMBER_MODE", "C_NUMBER_MODE", "BINARY_NUMBER_MODE", "REGEXP_MODE", "TITLE_MODE", "UNDERSCORE_TITLE_MODE", "METHOD_GUARD", "END_SAME_AS_BEGIN", "MODES", "skipIfHasPrecedingDot", "response", "scopeClassName", "_parent", "beginKeywords", "parent", "compileIllegal", "compileMatch", "compileRelevance", "beforeMatchExt", "originalMode", "COMMON_KEYWORDS", "DEFAULT_KEYWORD_SCOPE", "compileKeywords", "rawKeywords", "caseInsensitive", "scopeName", "compiledKeywords", "compileList", "keywordList", "keyword", "pair", "scoreForKeyword", "providedScore", "commonKeyword", "seenDeprecations", "error", "message", "warn", "deprecated", "version", "MultiClassError", "remapScopeNames", "regexes", "scopeNames", "emit", "positions", "i", "beginMultiClass", "endMultiClass", "scopeSugar", "MultiClass", "compileLanguage", "language", "langRe", "global", "MultiRegex", "terminators", "s", "matchData", "ResumableMultiRegex", "index", "matcher", "m2", "buildModeRegex", "mm", "term", "compileMode", "cmode", "ext", "keywordPattern", "c", "expandOrCloneMode", "dependencyOnParent", "variant", "HTMLInjectionError", "reason", "html", "escape", "inherit", "NO_MATCH", "MAX_KEYWORD_HITS", "HLJS", "hljs", "languages", "aliases", "plugins", "SAFE_MODE", "LANGUAGE_NOT_FOUND", "PLAINTEXT_LANGUAGE", "shouldNotHighlight", "languageName", "blockLanguage", "block", "classes", "getLanguage", "_class", "highlight", "codeOrLanguageName", "optionsOrCode", "ignoreIllegals", "code", "context", "fire", "_highlight", "codeToHighlight", "continuation", "keywordHits", "keywordData", "matchText", "processKeywords", "top", "modeBuffer", "lastIndex", "buf", "word", "data", "kind", "keywordRelevance", "relevance", "cssClass", "emitKeyword", "processSubLanguage", "continuations", "highlightAuto", "processBuffer", "emitMultiClass", "max", "klass", "startNewMode", "endOfMode", "matchPlusRemainder", "matched", "doIgnore", "resumeScanAtSamePosition", "doBeginMatch", "newMode", "beforeCallbacks", "cb", "doEndMatch", "endMode", "origin", "processContinuations", "list", "current", "item", "lastMatch", "processLexeme", "textBeforeMatch", "err", "processed", "iterations", "md", "beforeMatch", "processedCount", "justTextHighlightResult", "languageSubset", "plaintext", "results", "autoDetection", "sorted", "a", "b", "best", "secondBest", "updateClassName", "element", "currentLang", "resultLang", "highlightElement", "configure", "userOptions", "initHighlighting", "highlightAll", "initHighlightingOnLoad", "wantsHighlight", "boot", "registerLanguage", "languageDefinition", "lang", "error$1", "registerAliases", "unregisterLanguage", "alias", "listLanguages", "aliasList", "upgradePluginAPI", "plugin", "addPlugin", "removePlugin", "event", "deprecateHighlightBlock", "tslib_es6_exports", "__export", "__addDisposableResource", "__assign", "__asyncDelegator", "__asyncGenerator", "__asyncValues", "__await", "__awaiter", "__classPrivateFieldGet", "__classPrivateFieldIn", "__classPrivateFieldSet", "__createBinding", "__decorate", "__disposeResources", "__esDecorate", "__exportStar", "__extends", "__generator", "__importDefault", "__importStar", "__makeTemplateObject", "__metadata", "__param", "__propKey", "__read", "__rest", "__runInitializers", "__setFunctionName", "__spread", "__spreadArray", "__spreadArrays", "__values", "tslib_es6_default", "d", "b", "extendStatics", "__", "s", "t", "p", "decorators", "target", "key", "desc", "c", "r", "i", "paramIndex", "decorator", "ctor", "descriptorIn", "contextIn", "initializers", "extraInitializers", "accept", "f", "kind", "descriptor", "_", "done", "context", "result", "thisArg", "value", "useValue", "x", "name", "prefix", "metadataKey", "metadataValue", "_arguments", "P", "generator", "adopt", "resolve", "reject", "fulfilled", "step", "e", "rejected", "body", "y", "g", "verb", "n", "v", "op", "m", "o", "ar", "error", "il", "k", "a", "j", "jl", "to", "from", "pack", "l", "q", "resume", "settle", "fulfill", "cooked", "raw", "mod", "__setModuleDefault", "receiver", "state", "env", "async", "dispose", "fail", "_SuppressedError", "next", "rec", "init_tslib_es6", "__esmMin", "k2", "suppressed", "message", "tslib_es6_exports", "__export", "__addDisposableResource", "__assign", "__asyncDelegator", "__asyncGenerator", "__asyncValues", "__await", "__awaiter", "__classPrivateFieldGet", "__classPrivateFieldIn", "__classPrivateFieldSet", "__createBinding", "__decorate", "__disposeResources", "__esDecorate", "__exportStar", "__extends", "__generator", "__importDefault", "__importStar", "__makeTemplateObject", "__metadata", "__param", "__propKey", "__read", "__rest", "__runInitializers", "__setFunctionName", "__spread", "__spreadArray", "__spreadArrays", "__values", "tslib_es6_default", "d", "b", "extendStatics", "__", "s", "t", "p", "decorators", "target", "key", "desc", "c", "r", "i", "paramIndex", "decorator", "ctor", "descriptorIn", "contextIn", "initializers", "extraInitializers", "accept", "f", "kind", "descriptor", "_", "done", "context", "result", "thisArg", "value", "useValue", "x", "name", "prefix", "metadataKey", "metadataValue", "_arguments", "P", "generator", "adopt", "resolve", "reject", "fulfilled", "step", "e", "rejected", "body", "y", "g", "verb", "n", "v", "op", "m", "o", "ar", "error", "il", "k", "a", "j", "jl", "to", "from", "pack", "l", "q", "resume", "settle", "fulfill", "cooked", "raw", "mod", "__setModuleDefault", "receiver", "state", "env", "async", "dispose", "fail", "_SuppressedError", "next", "rec", "init_tslib_es6", "__esmMin", "k2", "suppressed", "message", "IdentifyOperation", "exports", "RevenueProperty", "SpecialEventType", "LogLevel", "exports", "PluginType", "exports", "ServerZone", "exports", "Status", "exports", "TransportType", "exports", "event_1", "exports", "logger_1", "plugin_1", "server_zone_1", "status_1", "transport_1", "exports", "MAX_PROPERTY_KEYS", "isValidObject", "properties", "key", "value", "exports", "isValidProperties", "property", "isValid", "value_1", "tslib_1", "value_1_1", "valueElement", "analytics_types_1", "constants_1", "valid_properties_1", "Identify", "tslib_1", "property", "value", "operation", "userPropertyMap", "exports", "analytics_types_1", "identify_1", "createTrackEvent", "eventInput", "eventProperties", "eventOptions", "baseEvent", "tslib_1", "exports", "createIdentifyEvent", "identify", "identifyEvent", "createGroupIdentifyEvent", "groupType", "groupName", "groupIdentify", "_a", "createGroupEvent", "groupEvent", "createRevenueEvent", "revenue", "analytics_types_1", "buildResult", "event", "code", "message", "exports", "analytics_types_1", "result_khulnasoft_1", "Timeline", "client", "plugin", "config", "_a", "pluginName", "index", "_b", "plugins", "event", "_this", "resolve", "timeout", "item", "tslib_1", "before", "before_1", "before_1_1", "e", "_e", "enrichment", "enrichment_1", "enrichment_1_1", "destination", "executeDestinations", "eventClone", "result", "queue", "exports", "exports", "returnWrapper", "awaitable", "exports", "event_khulnasoft_1", "timeline_1", "result_khulnasoft_1", "messages_1", "return_wrapper_1", "AmplitudeCore", "name", "config", "_a", "queueName", "queuedFunctions", "queuedFunctions_1", "tslib_1", "queuedFunctions_1_1", "queuedFunction", "_b", "eventInput", "eventProperties", "eventOptions", "event", "identify", "groupType", "groupName", "revenue", "plugin", "pluginName", "callback", "resolve", "_this", "result", "e_2", "message", "optOut", "exports", "analytics_types_1", "valid_properties_1", "Revenue", "productId", "quantity", "price", "revenueType", "revenue", "properties", "eventProperties", "tslib_1", "exports", "require_chunk", "__commonJSMin", "exports", "chunk", "arr", "size", "chunkSize", "chunks", "element", "index", "chunkIndex", "analytics_types_1", "PREFIX", "Logger", "logLevel", "args", "_i", "exports", "analytics_types_1", "constants_1", "logger_1", "getDefaultConfig", "exports", "Config", "options", "defaultConfig", "_a", "_b", "_c", "_d", "serverConfig", "optOut", "getServerUrl", "serverZone", "useBatch", "createServerConfig", "serverUrl", "_serverZone", "analytics_types_1", "messages_1", "constants_1", "chunk_1", "result_khulnasoft_1", "config_1", "getErrorMessage", "error", "getResponseBodyString", "res", "responseBodyString", "exports", "Destination", "config", "_a", "unsent", "_b", "event", "_this", "resolve", "context", "result", "list", "_i", "tryable", "timeout", "useRetry", "later", "batches", "batch", "payload", "extra", "eventWithoutExtra", "tslib_1", "serverUrl", "e_1", "errorMessage", "status", "dropIndex", "dropIndexSet", "retry", "index", "dropUserIds", "dropDeviceIds", "throttledIndex", "dropUserIdsSet", "dropDeviceIdsSet", "throttledIndexSet", "code", "message", "events", "analytics_types_1", "getStacktrace", "ignoreDepth", "trace", "text", "exports", "getClientLogConfig", "client", "_a", "tslib_1", "logger", "logLevel", "getValueByStringPath", "obj", "path", "_b", "_c", "attr", "getClientStates", "paths", "res", "paths_1", "paths_1_1", "debugWrapper", "fn", "fnName", "getLogConfig", "getStates", "fnContext", "args", "_i", "debugContext", "result", "UUID", "a", "exports", "MemoryStorage", "key", "value", "_a", "exports", "analytics_types_1", "BaseTransport", "_serverUrl", "_payload", "responseJSON", "statusCode", "status", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_j", "_k", "_l", "_m", "_o", "_p", "_q", "_r", "_s", "_t", "_u", "_v", "_w", "_x", "code", "exports", "core_client_1", "exports", "identify_1", "revenue_1", "destination_1", "config_1", "logger_1", "constants_1", "return_wrapper_1", "debug_1", "uuid_1", "memory_1", "base_1", "event_khulnasoft_1", "exports", "analytics_types_1", "analytics_core_1", "version_1", "Context", "config", "context", "_this", "resolve", "time", "contextEvent", "tslib_1", "exports", "analytics_core_1", "http", "https", "Http", "_super", "tslib_1", "serverUrl", "payload", "_this", "protocol", "url", "requestPayload", "options", "resolve", "req", "res", "responsePayload", "chunk", "parsedResponsePayload", "result", "exports", "analytics_core_1", "http_1", "NodeConfig", "_super", "tslib_1", "apiKey", "options", "exports", "useNodeConfig", "overrides", "analytics_core_1", "context_1", "config_1", "AmplitudeNode", "_super", "tslib_1", "apiKey", "options", "nodeOptions", "_a", "exports", "createInstance", "client", "require_cjs", "__commonJSMin", "exports", "node_client_1", "node_client_2", "analytics_core_1", "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", "MAX_CACHED_INPUTS", "lruMemoize", "f", "cache", "input", "i", "temp", "result", "normalize", "aPath", "path", "isAbsolute", "parts", "start", "part", "up", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "level", "index", "supportsNullProto", "obj", "identity", "s", "toSetString", "aStr", "isProtoString", "fromSetString", "length", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByOriginalPositionsNoSource", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "compareByGeneratedPositionsDeflatedNoLine", "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", "generatorOps", "sourceRoot", "generator", "mapping", "newMapping", "sourceFile", "sourceRelative", "content", "generated", "original", "source", "name", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "aName", "message", "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", "SortTemplate", "comparator", "swap", "ary", "x", "y", "temp", "randomIntInRange", "low", "high", "doQuickSort", "p", "r", "pivotIndex", "i", "pivot", "j", "q", "cloneSort", "template", "sortCache", "start", "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", "boundCallback", "names", "sources", "sourceMapURL", "i", "n", "mapping", "source", "aArgs", "line", "needle", "originalLine", "originalColumn", "version", "sourcesContent", "file", "s", "aSource", "relativeSource", "smc", "generatedMappings", "destGeneratedMappings", "destOriginalMappings", "length", "srcMapping", "destMapping", "Mapping", "compareGenerated", "sortGenerated", "array", "start", "l", "a", "b", "j", "generatedLine", "previousGeneratedColumn", "previousOriginalLine", "previousOriginalColumn", "previousSource", "previousName", "cachedSegments", "temp", "originalMappings", "str", "segment", "end", "value", "subarrayStart", "currentSource", "aNeedle", "aMappings", "aLineName", "aColumnName", "aComparator", "aBias", "nextMapping", "name", "sc", "nullOnMissing", "url", "fileUriAbsPath", "sections", "lastOffset", "offset", "offsetLine", "offsetColumn", "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", "Position", "constructor", "line", "col", "index", "column", "SourceLocation", "start", "end", "filename", "identifierName", "createPositionWithColumnOffset", "position", "columnOffset", "code", "ModuleErrors", "ImportMetaOutsideModule", "message", "ImportOutsideModule", "NodeDescriptions", "ArrayPattern", "AssignmentExpression", "AssignmentPattern", "ArrowFunctionExpression", "ConditionalExpression", "CatchClause", "ForOfStatement", "ForInStatement", "ForStatement", "FormalParameters", "Identifier", "ImportSpecifier", "ImportDefaultSpecifier", "ImportNamespaceSpecifier", "ObjectPattern", "ParenthesizedExpression", "RestElement", "UpdateExpression", "true", "false", "VariableDeclarator", "YieldExpression", "toNodeDescription", "node", "type", "prefix", "StandardErrors", "AccessorIsGenerator", "kind", "ArgumentsInClass", "AsyncFunctionInSingleStatementContext", "AwaitBindingIdentifier", "AwaitBindingIdentifierInStaticBlock", "AwaitExpressionFormalParameter", "AwaitUsingNotInAsyncContext", "AwaitNotInAsyncContext", "AwaitNotInAsyncFunction", "BadGetterArity", "BadSetterArity", "BadSetterRestParameter", "ConstructorClassField", "ConstructorClassPrivateField", "ConstructorIsAccessor", "ConstructorIsAsync", "ConstructorIsGenerator", "DeclarationMissingInitializer", "DecoratorArgumentsOutsideParentheses", "DecoratorBeforeExport", "DecoratorsBeforeAfterExport", "DecoratorConstructor", "DecoratorExportClass", "DecoratorSemicolon", "DecoratorStaticBlock", "DeferImportRequiresNamespace", "DeletePrivateField", "DestructureNamedImport", "DuplicateConstructor", "DuplicateDefaultExport", "DuplicateExport", "exportName", "DuplicateProto", "DuplicateRegExpFlags", "DynamicImportPhaseRequiresImportExpressions", "phase", "ElementAfterRest", "EscapedCharNotAnIdentifier", "ExportBindingIsString", "localName", "ExportDefaultFromAsIdentifier", "ForInOfLoopInitializer", "ForInUsing", "ForOfAsync", "ForOfLet", "GeneratorInSingleStatementContext", "IllegalBreakContinue", "IllegalLanguageModeDirective", "IllegalReturn", "ImportAttributesUseAssert", "ImportBindingIsString", "importName", "ImportCallArgumentTrailingComma", "ImportCallArity", "maxArgumentCount", "ImportCallNotNewExpression", "ImportCallSpreadArgument", "ImportJSONBindingNotDefault", "ImportReflectionHasAssertion", "ImportReflectionNotBinding", "IncompatibleRegExpUVFlags", "InvalidBigIntLiteral", "InvalidCodePoint", "InvalidCoverInitializedName", "InvalidDecimal", "InvalidDigit", "radix", "InvalidEscapeSequence", "InvalidEscapeSequenceTemplate", "InvalidEscapedReservedWord", "reservedWord", "InvalidIdentifier", "InvalidLhs", "ancestor", "InvalidLhsBinding", "InvalidLhsOptionalChaining", "InvalidNumber", "InvalidOrMissingExponent", "InvalidOrUnexpectedToken", "unexpected", "InvalidParenthesizedAssignment", "InvalidPrivateFieldResolution", "InvalidPropertyBindingPattern", "InvalidRecordProperty", "InvalidRestAssignmentPattern", "LabelRedeclaration", "labelName", "LetInLexicalBinding", "LineTerminatorBeforeArrow", "MalformedRegExpFlags", "MissingClassName", "MissingEqInAssignment", "MissingSemicolon", "MissingPlugin", "missingPlugin", "map", "name", "JSON", "stringify", "join", "MissingOneOfPlugins", "MissingUnicodeEscape", "MixingCoalesceWithLogical", "ModuleAttributeDifferentFromType", "ModuleAttributeInvalidValue", "ModuleAttributesWithDuplicateKeys", "key", "ModuleExportNameHasLoneSurrogate", "surrogateCharCode", "toString", "ModuleExportUndefined", "MultipleDefaultsInSwitch", "NewlineAfterThrow", "NoCatchOrFinally", "NumberIdentifier", "NumericSeparatorInEscapeSequence", "ObsoleteAwaitStar", "OptionalChainingNoNew", "OptionalChainingNoTemplate", "OverrideOnConstructor", "ParamDupe", "PatternHasAccessor", "PatternHasMethod", "PrivateInExpectedIn", "PrivateNameRedeclaration", "RecordExpressionBarIncorrectEndSyntaxType", "RecordExpressionBarIncorrectStartSyntaxType", "RecordExpressionHashIncorrectStartSyntaxType", "RecordNoProto", "RestTrailingComma", "SloppyFunction", "SloppyFunctionAnnexB", "SourcePhaseImportRequiresDefault", "StaticPrototype", "SuperNotAllowed", "SuperPrivateField", "TrailingDecorator", "TupleExpressionBarIncorrectEndSyntaxType", "TupleExpressionBarIncorrectStartSyntaxType", "TupleExpressionHashIncorrectStartSyntaxType", "UnexpectedArgumentPlaceholder", "UnexpectedAwaitAfterPipelineBody", "UnexpectedDigitAfterHash", "UnexpectedImportExport", "UnexpectedKeyword", "keyword", "UnexpectedLeadingDecorator", "UnexpectedLexicalDeclaration", "UnexpectedNewTarget", "UnexpectedNumericSeparator", "UnexpectedPrivateField", "UnexpectedReservedWord", "UnexpectedSuper", "UnexpectedToken", "expected", "UnexpectedTokenUnaryExponentiation", "UnexpectedUsingDeclaration", "UnsupportedBind", "UnsupportedDecoratorExport", "UnsupportedDefaultExport", "UnsupportedImport", "UnsupportedMetaProperty", "target", "onlyValidPropertyName", "UnsupportedParameterDecorator", "UnsupportedPropertyDecorator", "UnsupportedSuper", "UnterminatedComment", "UnterminatedRegExp", "UnterminatedString", "UnterminatedTemplate", "UsingDeclarationExport", "UsingDeclarationHasBindingPattern", "VarRedeclaration", "YieldBindingIdentifier", "YieldInParameter", "ZeroDigitNumericSeparator", "StrictModeErrors", "StrictDelete", "StrictEvalArguments", "referenceName", "StrictEvalArgumentsBinding", "bindingName", "StrictFunction", "StrictNumericEscape", "StrictOctalLiteral", "StrictWith", "UnparenthesizedPipeBodyDescriptions", "Set", "PipelineOperatorErrors", "PipeBodyIsTighter", "PipeTopicRequiresHackPipes", "PipeTopicUnbound", "PipeTopicUnconfiguredToken", "token", "PipeTopicUnused", "PipeUnparenthesizedBody", "PipelineBodyNoArrow", "PipelineBodySequenceExpression", "PipelineHeadSequenceExpression", "PipelineTopicUnused", "PrimaryTopicNotAllowed", "PrimaryTopicRequiresSmartPipeline", "defineHidden", "obj", "value", "Object", "defineProperty", "enumerable", "configurable", "toParseErrorConstructor", "toMessage", "reasonCode", "syntaxPlugin", "hasMissingPlugin", "oldReasonCodes", "AccessorCannotDeclareThisParameter", "AccessorCannotHaveTypeParameters", "ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference", "SetAccessorCannotHaveOptionalParameter", "SetAccessorCannotHaveRestParameter", "SetAccessorCannotHaveReturnType", "loc", "details", "error", "SyntaxError", "pos", "overrides", "_overrides$loc", "assign", "get", "set", "writable", "ParseErrorEnum", "argument", "Array", "isArray", "parseErrorTemplates", "ParseErrorConstructors", "keys", "template", "_ref", "rest", "_objectWithoutPropertiesLoose", "_excluded", "Errors", "toUnenumerable", "object", "toESTreeLocation", "estree", "superClass", "parse", "file", "options", "tokens", "parseRegExpLiteral", "pattern", "flags", "regex", "RegExp", "estreeParseLiteral", "parseBigIntLiteral", "bigInt", "BigInt", "bigint", "String", "parseDecimalLiteral", "decimal", "parseLiteral", "parseStringLiteral", "parseNumericLiteral", "parseNullLiteral", "parseBooleanLiteral", "directiveToStmt", "directive", "expression", "raw", "extra", "expressionValue", "stmt", "rawValue", "initFunction", "isAsync", "checkDeclaration", "isObjectProperty", "getObjectOrClassMethodParams", "method", "params", "isValidDirective", "_stmt$expression$extr", "parenthesized", "parseBlockBody", "allowDirectives", "topLevel", "afterBlockParse", "directiveStatements", "directives", "d", "body", "concat", "pushClassMethod", "classBody", "isGenerator", "isConstructor", "allowsDirectSuper", "parseMethod", "typeParameters", "push", "parsePrivateName", "getPluginOption", "convertPrivateNameToPrivateIdentifier", "getPrivateNameSV", "id", "isPrivateName", "parseFunctionBody", "allowExpression", "isMethod", "allowDirectSuper", "inClassScope", "funcNode", "startNode", "computed", "finishNode", "nameIsConstructor", "parseClassProperty", "args", "propertyNode", "parseClassPrivateProperty", "parseObjectMethod", "prop", "isPattern", "isAccessor", "shorthand", "parseObjectProperty", "startLoc", "refExpressionErrors", "isValidLVal", "isUnparenthesizedInAssign", "binding", "isAssignable", "isBinding", "toAssignable", "isLHS", "classScope", "usePrivateName", "toAssignableObjectExpressionProp", "isLast", "raise", "finishCallExpression", "unfinished", "optional", "callee", "source", "arguments", "hasPlugin", "_ref2", "attributes", "toReferencedArguments", "parseExport", "decorators", "exportStartLoc", "state", "lastTokStartLoc", "exported", "specifiers", "length", "_declaration$decorato", "declaration", "resetStartLocation", "parseSubscript", "base", "noCalls", "optionalChainMember", "substring", "stop", "chain", "startNodeAtNode", "isOptionalMemberExpression", "hasPropertyAsPrivateName", "isObjectMethod", "finishNodeAt", "endLoc", "resetEndLocation", "lastTokEndLoc", "TokContext", "preserveSpace", "types", "brace", "j_oTag", "j_cTag", "j_expr", "beforeExpr", "startsExpr", "isLoop", "isAssign", "postfix", "ExportedTokenType", "label", "conf", "rightAssociative", "binop", "updateContext", "keywords", "Map", "createKeyword", "createToken", "createBinop", "tokenTypeCounter", "tokenTypes", "tokenLabels", "tokenBinops", "tokenBeforeExprs", "tokenStartsExprs", "tokenPrefixes", "_options$binop", "_options$beforeExpr", "_options$startsExpr", "_options$prefix", "createKeywordLike", "_options$binop2", "_options$beforeExpr2", "_options$startsExpr2", "_options$prefix2", "tt", "bracketL", "bracketHashL", "bracketBarL", "bracketR", "bracketBarR", "braceL", "braceBarL", "braceHashL", "braceR", "braceBarR", "parenL", "parenR", "comma", "semi", "colon", "doubleColon", "dot", "question", "questionDot", "arrow", "ellipsis", "backQuote", "dollarBraceL", "templateTail", "templateNonTail", "at", "hash", "interpreterDirective", "eq", "slashAssign", "xorAssign", "moduloAssign", "incDec", "bang", "tilde", "doubleCaret", "doubleAt", "pipeline", "nullishCoalescing", "logicalOR", "logicalAND", "bitwiseOR", "bitwiseXOR", "bitwiseAND", "equality", "lt", "gt", "relational", "bitShift", "bitShiftL", "bitShiftR", "plusMin", "modulo", "star", "slash", "exponent", "_in", "_instanceof", "_break", "_case", "_catch", "_continue", "_debugger", "_default", "_else", "_finally", "_function", "_if", "_return", "_switch", "_throw", "_try", "_var", "_const", "_with", "_new", "_this", "_super", "_class", "_extends", "_export", "_import", "_null", "_true", "_false", "_typeof", "_void", "_delete", "_do", "_for", "_while", "_as", "_assert", "_async", "_await", "_defer", "_from", "_get", "_let", "_meta", "_of", "_sent", "_set", "_source", "_static", "_using", "_yield", "_asserts", "_checks", "_exports", "_global", "_implements", "_intrinsic", "_infer", "_is", "_mixins", "_proto", "_require", "_satisfies", "_keyof", "_readonly", "_unique", "_abstract", "_declare", "_enum", "_module", "_namespace", "_interface", "_type", "_opaque", "string", "num", "regexp", "privateName", "eof", "jsxName", "jsxText", "jsxTagStart", "jsxTagEnd", "placeholder", "tokenIsIdentifier", "tokenKeywordOrIdentifierIsKeyword", "tokenIsKeywordOrIdentifier", "tokenIsLiteralPropertyName", "tokenComesBeforeExpression", "tokenCanStartExpression", "tokenIsAssignment", "tokenIsFlowInterfaceOrTypeOrOpaque", "tokenIsLoop", "tokenIsKeyword", "tokenIsOperator", "tokenIsPostfix", "tokenIsPrefix", "tokenIsTSTypeOperator", "tokenIsTSDeclarationStart", "tokenLabelName", "tokenOperatorPrecedence", "tokenIsRightAssociative", "tokenIsTemplate", "getExportedToken", "context", "pop", "tc", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "i", "isIdentifierStart", "test", "fromCharCode", "isIdentifierChar", "reservedWords", "strict", "strictBind", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "isReservedWord", "word", "inModule", "isStrictReservedWord", "has", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "isIteratorStart", "current", "next", "next2", "reservedWordLikeSet", "canBeReservedWord", "Scope", "names", "firstLexicalName", "ScopeHandler", "parser", "scopeStack", "undefinedExports", "inTopLevel", "currentScope", "inFunction", "currentVarScopeFlags", "allowSuper", "currentThisScopeFlags", "inClass", "inClassAndNotInNonArrowFunction", "inStaticBlock", "ScopeFlag", "inNonArrowFunction", "treatFunctionsAsVar", "treatFunctionsAsVarInScope", "createScope", "enter", "exit", "scope", "declareName", "bindingType", "checkRedeclarationInScope", "maybeExportDefined", "delete", "isRedeclaredInScope", "checkLocalExport", "FlowScope", "declareFunctions", "FlowScopeHandler", "add", "BaseParser", "sawUnambiguousESM", "ambiguousScriptDifferentAst", "pluginConfig", "plugins", "pluginName", "pluginOptions", "actualOptions", "plugin", "_this$plugins$get", "setTrailingComments", "comments", "trailingComments", "undefined", "unshift", "setLeadingComments", "leadingComments", "setInnerComments", "innerComments", "adjustInnerComments", "elements", "commentWS", "lastElement", "CommentsParser", "addComment", "comment", "commentsLen", "processComment", "commentStack", "commentStackLength", "lastCommentWS", "leadingNode", "nodeStart", "commentEnd", "containingNode", "finalizeComment", "splice", "trailingNode", "commentStart", "input", "charCodeAt", "properties", "finalizeRemainingComments", "resetPreviousNodeTrailingComments", "resetPreviousIdentifierLeadingComments", "takeSurroundingComments", "lineBreak", "lineBreakG", "isNewLine", "hasNewLine", "skipWhiteSpace", "skipWhiteSpaceInLine", "isWhitespace", "State", "curLine", "lineStart", "errors", "potentialArrowAt", "noArrowAt", "noArrowParamsConversionAt", "topicContext", "maxNumOfResolvableTopics", "maxTopicIndex", "labels", "ct", "firstInvalidTemplateEscapePos", "strictErrors", "tokensLength", "v", "init", "strictMode", "sourceType", "startLine", "startColumn", "maybeInArrowParameters", "inType", "noAnonFunctionType", "hasFlowComment", "isAmbientContext", "inAbstractClass", "inDisallowConditionalTypesContext", "soloAwait", "inFSharpPipelineDirectBody", "canStartJSXElement", "containsEsc", "hasTopLevelAwait", "curPosition", "clone", "slice", "forbiddenNumericSeparatorSiblings", "decBinOct", "hex", "isAllowedNumericSeparatorSibling", "bin", "ch", "oct", "dec", "readStringContents", "initialPos", "initialLineStart", "initialCurLine", "out", "firstInvalidLoc", "chunkStart", "unterminated", "isStringEnd", "res", "readEscapedChar", "str", "containsInvalid", "inTemplate", "throwOnInvalid", "readHexChar", "readCodePoint", "fromCodePoint", "strictNumericEscape", "startPos", "octalStr", "exec", "octal", "parseInt", "len", "forceLen", "n", "readInt", "invalidEscapeSequence", "allowNumSeparator", "bailOnError", "forbiddenSiblings", "isAllowedSibling", "invalid", "total", "e", "Infinity", "val", "prev", "Number", "isNaN", "unexpectedNumericSeparator", "numericSeparatorInEscapeSequence", "_isDigit", "invalidDigit", "indexOf", "invalidCodePoint", "buildPosition", "VALID_REGEX_FLAGS", "Token", "Tokenizer", "isLookahead", "errorHandlers_readInt", "errorRecovery", "errorKhulnasoft", "errorHandlers_readCodePoint", "errorHandlers_readStringContents_string", "recordStrictModeErrors", "errorHandlers_readStringContents_template", "pushToken", "checkKeywordEscapes", "nextToken", "eat", "match", "createLookaheadState", "curContext", "lookahead", "old", "curr", "nextTokenStart", "nextTokenStartSince", "lastIndex", "lookaheadCharCode", "nextTokenInLineStart", "nextTokenInLineStartSince", "lookaheadInLineCharCode", "codePointAtPos", "cp", "trail", "setStrict", "forEach", "toParseError", "clear", "skipSpace", "finishToken", "getTokenFromCode", "skipBlockComment", "skipLineComment", "startSkip", "spaceStart", "loop", "attachComment", "annexB", "commentWhitespace", "prevType", "replaceToken", "readToken_numberSign", "readToken_interpreter", "nextPos", "expectPlugin", "readWord1", "finishOp", "readToken_dot", "readNumber", "readToken_slash", "readToken_mult_modulo", "width", "readToken_pipe_amp", "readToken_caret", "proposal", "topicToken", "codePointAt", "readToken_atSign", "readToken_plus_min", "readToken_lt", "readToken_gt", "size", "readToken_eq_excl", "readToken_question", "readTemplateToken", "readRadixNumber", "readString", "readWord", "readRegexp", "escaped", "content", "mods", "char", "includes", "isBigInt", "replace", "startsWithDot", "isFloat", "hasExponent", "isOctal", "hasLeadingZero", "integer", "underscorePos", "isDecimal", "parseFloat", "quote", "readTemplateContinuation", "opening", "firstCode", "escStart", "identifierCheck", "esc", "keywordTypes", "raiseOverwrite", "expectOnePlugin", "pluginNames", "some", "ClassScope", "privateNames", "loneAccessors", "undefinedPrivateNames", "ClassScopeHandler", "stack", "oldClassScope", "from", "declarePrivateName", "elementType", "redefined", "accessor", "oldStatic", "newStatic", "oldKind", "newKind", "ExpressionScope", "canBeArrowParameterDeclaration", "isCertainlyParameterDeclaration", "ArrowHeadParsingScope", "declarationErrors", "recordDeclarationError", "ParsingErrorClass", "clearDeclarationError", "iterateErrors", "iterator", "ExpressionScopeHandler", "recordParameterInitializerError", "origin", "recordArrowParameterBindingError", "recordAsyncArrowParametersError", "validateAsPattern", "newParameterDeclarationScope", "newArrowHeadScope", "newAsyncArrowScope", "newExpressionScope", "ProductionParameterHandler", "stacks", "currentFlags", "hasAwait", "hasYield", "hasReturn", "hasIn", "functionFlags", "UtilParser", "addExtra", "isContextual", "isUnparsedContextual", "nameStart", "nameEnd", "nextCh", "isLookaheadContextual", "eatContextual", "expectContextual", "canInsertSemicolon", "hasPrecedingLineBreak", "hasFollowingLineBreak", "isLineTerminator", "semicolon", "allowAsi", "expect", "tryParse", "fn", "oldState", "abortSignal", "failState", "thrown", "aborted", "checkExpressionErrors", "andThrow", "shorthandAssignLoc", "doubleProtoLoc", "privateKeyLoc", "optionalParametersLoc", "hasErrors", "isLiteralPropertyName", "property", "initializeScopes", "oldLabels", "oldExportedIdentifiers", "exportedIdentifiers", "oldInModule", "oldScope", "getScopeHandler", "oldProdParam", "prodParam", "oldExpressionScope", "expressionScope", "enterInitialScopes", "paramFlags", "checkDestructuringPrivate", "ExpressionErrors", "Node", "ranges", "range", "NodePrototype", "prototype", "__clone", "newNode", "clonePlaceholder", "cloneIdentifier", "cloned", "create", "expectedNode", "cloneStringLiteral", "NodeUtils", "startNodeAt", "resetStartLocationFromNode", "locationNode", "reservedTypes", "FlowErrors", "AmbiguousConditionalArrow", "AmbiguousDeclareModuleKind", "AssignReservedType", "reservedType", "DeclareClassElement", "DeclareClassFieldInitializer", "DuplicateDeclareModuleExports", "EnumBooleanMemberNotInitialized", "memberName", "enumName", "EnumDuplicateMemberName", "EnumInconsistentMemberValues", "EnumInvalidExplicitType", "invalidEnumType", "EnumInvalidExplicitTypeUnknownSupplied", "EnumInvalidMemberInitializerPrimaryType", "explicitType", "EnumInvalidMemberInitializerSymbolType", "EnumInvalidMemberInitializerUnknownType", "EnumInvalidMemberName", "suggestion", "EnumNumberMemberNotInitialized", "EnumStringMemberInconsistentlyInitialized", "GetterMayNotHaveThisParam", "ImportReflectionHasImportType", "ImportTypeShorthandOnlyInPureImport", "InexactInsideExact", "InexactInsideNonObject", "InexactVariance", "InvalidNonTypeImportInDeclareModule", "MissingTypeParamDefault", "NestedDeclareModule", "NestedFlowComment", "PatternIsOptional", "SetterMayNotHaveThisParam", "SpreadVariance", "ThisParamAnnotationRequired", "ThisParamBannedInConstructor", "ThisParamMayNotBeOptional", "ThisParamMustBeFirst", "ThisParamNoDefault", "TypeBeforeInitializer", "TypeCastInPattern", "UnexpectedExplicitInexactInObject", "UnexpectedReservedType", "UnexpectedReservedUnderscore", "UnexpectedSpaceBetweenModuloChecks", "UnexpectedSpreadType", "UnexpectedSubtractionOperand", "UnexpectedTokenAfterTypeParameter", "UnexpectedTypeParameterBeforeAsyncArrowFunction", "UnsupportedDeclareExportKind", "unsupportedExportKind", "UnsupportedStatementInDeclareModule", "UnterminatedFlowComment", "isEsModuleType", "bodyElement", "hasTypeImportKind", "importKind", "exportSuggestions", "const", "let", "interface", "partition", "list", "list1", "list2", "FLOW_PRAGMA_REGEX", "flow", "flowPragma", "shouldParseTypes", "matches", "Error", "flowParseTypeInitialiser", "tok", "oldInType", "flowParseType", "flowParsePredicate", "moduloLoc", "parseExpression", "flowParseTypeAndPredicateInitialiser", "predicate", "flowParseDeclareClass", "flowParseInterfaceish", "flowParseDeclareFunction", "parseIdentifier", "typeNode", "typeContainer", "flowParseTypeParameterDeclaration", "tmp", "flowParseFunctionTypeParams", "this", "returnType", "typeAnnotation", "flowParseDeclare", "insideModule", "flowParseDeclareVariable", "flowParseDeclareModuleExports", "flowParseDeclareModule", "flowParseDeclareTypeAlias", "flowParseDeclareOpaqueType", "flowParseDeclareInterface", "flowParseDeclareExportDeclaration", "flowParseTypeAnnotatableIdentifier", "parseExprAtom", "bodyNode", "parseImport", "hasModuleExport", "default", "isLet", "exportKind", "flowParseTypeAnnotation", "finished", "flowParseTypeAlias", "flowParseOpaqueType", "isClass", "flowParseRestrictedIdentifier", "extends", "flowParseInterfaceExtends", "implements", "mixins", "flowParseObjectType", "allowStatic", "allowExact", "allowSpread", "allowProto", "allowInexact", "flowParseQualifiedTypeIdentifier", "flowParseTypeParameterInstantiation", "flowParseInterface", "checkNotUnderscore", "checkReservedType", "liberal", "right", "declare", "supertype", "impltype", "flowParseTypeParameter", "requireDefault", "nodeStartLoc", "variance", "flowParseVariance", "ident", "bound", "defaultRequired", "typeParameter", "oldNoAnonFunctionType", "flowParseTypeParameterInstantiationCallOrNew", "flowParseTypeOrImplicitInstantiation", "flowParseInterfaceType", "flowParseObjectPropertyKey", "flowParseObjectTypeIndexer", "isStatic", "static", "flowParseObjectTypeInternalSlot", "flowParseObjectTypeMethodish", "flowParseFunctionTypeParam", "flowParseObjectTypeCallProperty", "valueNode", "callProperties", "indexers", "internalSlots", "endDelim", "exact", "inexact", "protoStartLoc", "inexactStartLoc", "propOrInexact", "flowParseObjectTypeProperty", "flowObjectTypeSemicolon", "proto", "flowCheckGetterSetterParams", "paramCount", "_startLoc", "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", "parseStatementLike", "enums", "flowParseEnumDeclaration", "parseExpressionStatement", "expr", "shouldParseExportDeclaration", "isExportDefaultSpecifier", "parseExportDefaultExpression", "parseConditional", "setOptionalParametersError", "originalNoArrowAt", "consequent", "failed", "tryParseConditionalConsequent", "valid", "getArrowLikeExpressions", "alternate", "parseMaybeAssign", "parseMaybeAssignAllowIn", "disallowInvalid", "arrows", "finishArrowValidation", "every", "_node$extra", "toAssignableList", "trailingCommaLoc", "checkParams", "result", "parseParenItem", "typeCastNode", "assertModuleNodeAllowed", "parseExportDeclaration", "declarationNode", "parseExportSpecifiers", "parseExportFrom", "eatExportStar", "maybeParseExportNamespaceSpecifier", "hasNamespace", "parseClassId", "isStatement", "optionalId", "parseClassMember", "member", "parseClassMemberFromModifier", "isIterator", "readIterator", "fullWord", "left", "exprList", "toReferencedList", "isParenthesizedExpr", "_expr$extra", "parseArrayLike", "close", "canBePattern", "isTuple", "isParenthesized", "isClassMethod", "isClassProperty", "isNonstaticConstructor", "isThisParam", "pushClassPrivateMethod", "parseClassSuper", "superTypeParameters", "implemented", "checkGetterSetterParams", "parsePropertyNamePrefixOperator", "parseObjPropValue", "parseFunctionParamType", "parseMaybeDefault", "checkImportReflection", "module", "parseImportSpecifierLocal", "specifier", "local", "finishImportSpecifier", "isPotentialImportPhase", "isExport", "applyImportPhase", "parseImportSpecifier", "importedIsString", "isInTypeOnlyImport", "isMaybeTypeOnly", "firstIdent", "imported", "specifierTypeKind", "as_ident", "specifierIsTypeImport", "checkReservedWord", "parseBindingAtom", "parseFunctionParams", "parseVarId", "decl", "parseAsyncArrowFromCallExpression", "call", "shouldParseAsyncArrow", "afterLeftParse", "_jsx", "jsx", "currentContext", "_jsx2", "_jsx3", "abort", "_arrowExpression$extr", "arrowExpression", "maybeUnwrapTypeCastExpression", "async", "parseArrow", "shouldParseArrow", "setArrowFunctionParameters", "allowDuplicates", "isArrowFunction", "strictModeChanged", "parseParenAndDistinguishExpression", "canBeArrow", "parseSubscripts", "parseCallExpressionArguments", "parseAsyncArrowWithTypeParameters", "subscriptState", "isLookaheadToken_lt", "typeArguments", "parseNewCallee", "targs", "parseArrowExpression", "parseTopLevel", "program", "fileNode", "skipFlowComment", "hasFlowCommentCompletion", "commentSkip", "shiftToFirstNonWhiteSpace", "ch2", "ch3", "flowEnumErrorBooleanMemberNotInitialized", "flowEnumErrorInvalidMemberInitializer", "enumContext", "flowEnumErrorNumberMemberNotInitialized", "flowEnumErrorStringMemberInconsistentlyInitialized", "flowEnumMemberInit", "endOfInit", "literal", "flowEnumMemberRaw", "flowEnumCheckExplicitTypeMismatch", "expectedType", "flowEnumMembers", "seenNames", "members", "booleanMembers", "numberMembers", "stringMembers", "defaultedMembers", "hasUnknownMembers", "memberNode", "toUpperCase", "flowEnumStringMembers", "initializedMembers", "flowEnumParseExplicitType", "flowEnumBody", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "afterNext", "entities", "__proto__", "quot", "amp", "apos", "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", "JsxErrors", "AttributeIsEmpty", "MissingClosingTagElement", "openingTagName", "MissingClosingTagFragment", "UnexpectedSequenceExpression", "HTMLEntity", "UnsupportedJsxValue", "UnterminatedJsxContent", "UnwrappedAdjacentJSXElements", "isFragment", "getQualifiedJSXName", "namespace", "jsxReadToken", "jsxReadEntity", "jsxReadNewLine", "normalizeCRLF", "jsxReadString", "codePoint", "count", "desc", "entity", "XHTMLEntities", "jsxReadWord", "jsxParseIdentifier", "jsxParseNamespacedName", "jsxParseElementName", "jsxParseAttributeValue", "setContext", "jsxParseExpressionContainer", "jsxParseEmptyExpression", "jsxParseSpreadChild", "previousContext", "jsxParseAttribute", "jsxParseOpeningElementAt", "jsxParseOpeningElementAfterName", "selfClosing", "jsxParseClosingElementAt", "jsxParseElementAt", "children", "openingElement", "closingElement", "contents", "openingFragment", "closingFragment", "jsxParseElement", "newContext", "TypeScriptScope", "tsNames", "TypeScriptScopeHandler", "importsStack", "hasImport", "allowShadow", "isConst", "wasConst", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "last", "_node$extra2", "operator", "arg", "checkToRestConversion", "elt", "element", "toReferencedListDeep", "parseSpread", "parseRestBinding", "parseBindingList", "ParseBindingListFlags", "parseObjectLike", "closeCharCode", "allowEmpty", "elts", "checkCommaAfterRest", "parseDecorator", "parseAssignableListItem", "parseBindingRestProperty", "parseBindingProperty", "parsePropertyName", "_left", "checkLVal", "checkClashes", "hasParenthesizedAncestor", "_expression$extra", "checkIdentifier", "validity", "ParseErrorClass", "isParenthesizedExpression", "nextAncestor", "child", "declareNameFromIdentifier", "identifier", "allowPattern", "nonNull", "x", "assert", "TSErrors", "AbstractMethodHasImplementation", "methodName", "AbstractPropertyHasInitializer", "propertyName", "AccessorCannotBeOptional", "ClassMethodHasDeclare", "ClassMethodHasReadonly", "ConstructorHasTypeParameters", "DeclareAccessor", "DeclareClassFieldHasInitializer", "DeclareFunctionHasImplementation", "DuplicateAccessibilityModifier", "modifier", "DuplicateModifier", "EmptyHeritageClauseType", "EmptyTypeArguments", "EmptyTypeParameters", "ExpectedAmbientAfterExportDeclare", "ImportAliasHasImportType", "IncompatibleModifiers", "modifiers", "IndexSignatureHasAbstract", "IndexSignatureHasAccessibility", "IndexSignatureHasDeclare", "IndexSignatureHasOverride", "IndexSignatureHasStatic", "InitializerNotAllowedInAmbientContext", "InvalidModifierOnTypeMember", "InvalidModifierOnTypeParameter", "InvalidModifierOnTypeParameterPositions", "InvalidModifiersOrder", "orderedModifiers", "InvalidPropertyAccessAfterInstantiationExpression", "InvalidTupleMemberLabel", "MissingInterfaceName", "NonAbstractClassHasAbstractMethod", "NonClassMethodPropertyHasAbstractModifer", "OptionalTypeBeforeRequired", "OverrideNotInSubClass", "PrivateElementHasAbstract", "PrivateElementHasAccessibility", "ReadonlyForMethodSignature", "ReservedArrowTypeParam", "ReservedTypeAssertion", "SingleTypeParameterWithoutTrailingComma", "typeParameterName", "StaticBlockCannotHaveModifier", "TupleOptionalAfterType", "TypeAnnotationAfterAssign", "TypeImportCannotSpecifyDefaultAndNamed", "TypeModifierIsUsedInTypeExports", "TypeModifierIsUsedInTypeImports", "UnexpectedParameterModifier", "UnexpectedReadonly", "UnexpectedTypeAnnotation", "UnexpectedTypeCastInParameter", "UnsupportedImportTypeArgument", "UnsupportedParameterPropertyKind", "UnsupportedSignatureParameterKind", "keywordTypeFromName", "tsIsAccessModifier", "tsIsVarianceAnnotations", "typescript", "tsParseInOutModifiers", "tsParseModifiers", "bind", "allowedModifiers", "disallowedModifiers", "errorTemplate", "tsParseConstModifier", "tsParseInOutConstModifiers", "tsIsIdentifier", "tsTokenCanFollowModifier", "tsNextTokenOnSameLineAndCanFollowModifier", "tsNextTokenCanFollowModifier", "tsParseModifier", "stopOnStartOfClassStaticBlock", "tsIsStartOfStaticBlocks", "tsTryParse", "modified", "enforceOrder", "before", "after", "incompatible", "mod1", "mod2", "accessibility", "hasOwnProperty", "tsIsListTerminator", "tsParseList", "parseElement", "tsParseDelimitedList", "refTrailingCommaPos", "tsParseDelimitedListWorker", "expectSuccess", "trailingCommaPos", "tsParseBracketedList", "bracket", "skipFirstToken", "tsParseImportType", "qualifier", "tsParseEntityName", "tsParseTypeArguments", "allowReservedWords", "tsParseTypeReference", "typeName", "tsParseThisTypePredicate", "lhs", "parameterName", "tsParseTypeAnnotation", "asserts", "tsParseThisTypeNode", "tsParseTypeQuery", "exprName", "tsParseTypeParameter", "parseModifiers", "tsParseTypeParameterName", "constraint", "tsEatThenParseType", "tsTryParseTypeParameters", "tsParseTypeParameters", "tsFillSignature", "returnToken", "signature", "returnTokenRequired", "paramsKey", "returnTypeKey", "tsParseBindingListForSignature", "tsParseTypeOrTypePredicateAnnotation", "tsParseTypeMemberSemicolon", "tsParseSignatureMember", "tsIsUnambiguouslyIndexSignature", "tsTryParseIndexSignature", "tsLookAhead", "parameters", "tsTryParseTypeAnnotation", "tsParsePropertyOrMethodSignature", "readonly", "nodeAny", "firstParameter", "tsParseTypeMember", "idx", "tsParseTypeLiteral", "tsParseObjectTypeMembers", "tsIsStartOfMappedType", "tsParseMappedType", "tsExpectThenParseType", "nameType", "tsParseType", "tsTryParseType", "tsParseTupleType", "elementTypes", "tsParseTupleElementType", "seenOptionalElement", "elementNode", "labeled", "chAfterWord", "wordName", "typeOrLabel", "tsParseNonArrayType", "labeledNode", "optionalTypeNode", "restNode", "tsParseParenthesizedType", "tsParseFunctionOrConstructorType", "abstract", "tsInAllowConditionalTypesContext", "tsParseLiteralTypeNode", "tsParseTemplateLiteralType", "parseTemplate", "parseTemplateSubstitution", "tsParseThisTypeOrThisTypePredicate", "thisKeyword", "parseMaybeUnary", "nodeType", "tsParseArrayTypeOrHigher", "tsParseTypeOperator", "tsParseTypeOperatorOrHigher", "tsCheckTypeAnnotationForReadOnly", "tsParseInferType", "tsParseConstraintForInferType", "tsInDisallowConditionalTypesContext", "tsParseUnionOrIntersectionType", "parseConstituentType", "hasLeadingOperator", "tsParseIntersectionTypeOrHigher", "tsParseUnionTypeOrHigher", "tsIsStartOfFunctionType", "tsIsUnambiguouslyStartOfFunctionType", "tsSkipParameterStart", "previousErrorCount", "tsInType", "t", "tsParseTypePredicateAsserts", "thisTypePredicate", "typePredicateVariable", "tsParseTypePredicatePrefix", "tsTryParseTypeOrTypePredicateAnnotation", "eatColon", "tsParseNonConditionalType", "checkType", "extendsType", "trueType", "falseType", "isAbstractConstructorSignature", "tsParseTypeAssertion", "tsParseHeritageClause", "originalStartLoc", "delimitedList", "tsParseInterfaceDeclaration", "tsParseTypeAliasDeclaration", "tsInNoContext", "cb", "oldContext", "oldInDisallowConditionalTypesContext", "tsNextThenParseType", "tsParseEnumMember", "initializer", "tsParseEnumDeclaration", "tsParseModuleBlock", "parseBlockOrModuleBlockBody", "tsParseModuleOrNamespaceDeclaration", "nested", "inner", "tsParseAmbientExternalModuleDeclaration", "global", "tsParseImportEqualsDeclaration", "maybeDefaultIdentifier", "moduleReference", "tsParseModuleReference", "tsIsExternalModuleReference", "tsParseExternalModuleReference", "f", "tsTryParseAndCatch", "tsTryParseDeclare", "nany", "startType", "tsInAmbientContext", "parseFunctionStatement", "parseClass", "parseVarStatement", "tsParseDeclaration", "tsTryParseExportDeclaration", "tsParseExpressionStatement", "mod", "tsCheckLineTerminator", "tsParseAbstractDeclaration", "tsTryParseGenericAsyncArrowFunction", "oldMaybeInArrowParameters", "tsParseTypeArgumentsInExpression", "reScan_lt", "reScan_lt_gt", "tsIsDeclarationStart", "override", "pp", "parameter", "isSimpleParameter", "tsDisallowOptionalPattern", "bodilessType", "registerFunctionStatementId", "tsCheckForInvalidTypeCasts", "items", "isInParens", "nonNullExpression", "isOptionalCall", "missingParenErrorLoc", "atPossibleAsyncArrow", "asyncArrowFn", "parseTaggedTemplateExpression", "tokenType", "_callee$extra", "parseExprOp", "leftStartLoc", "minPrec", "isSatisfies", "checkKeywords", "checkDuplicateExports", "importNode", "parseMaybeImportPhase", "parseImportSpecifiersAndAfter", "nodeImportEquals", "isAbstractClass", "cls", "allowMissingInitializer", "declarations", "isValidAmbientConstInitializer", "parseStatementContent", "parseAccessModifier", "tsHasSomeModifiers", "callParseClassMemberWithIsStatic", "parseClassStaticBlock", "parseClassMemberWithIsStatic", "hadSuperClass", "parsePostMemberNameModifiers", "methodOrProp", "isDeclare", "parseClassPropertyAnnotation", "definite", "parseClassAccessorProperty", "declareClassPrivateMethodInScope", "_typeCast", "_typeCast2", "typeCast", "_typeParameters", "reportReservedArrowTypeParam", "trailingComma", "sawUnary", "toAssignableParenthesizedExpression", "parseMaybeDecoratorArguments", "canHaveLeadingDecorator", "getGetterSetterExpectedParamCount", "baseCount", "firstParam", "parseCatchClauseParam", "oldIsAmbientContext", "oldStrict", "oldInAbstractClass", "maybeTakeDecorators", "shouldParseAsAmbientContext", "getExpression", "parseExportSpecifier", "isString", "isInTypeExport", "parseTypeOnlyImportExportSpecifier", "isImport", "isInTypeOnlyImportExport", "leftOfAsKey", "rightOfAsKey", "leftOfAs", "rightOfAs", "hasTypeSpecifier", "canParseAsKeyword", "firstAs", "secondAs", "parseModuleExportName", "kindKey", "isPossiblyLiteralEnum", "expressions", "isUncomputedMemberExpressionChain", "isNumber", "isNegativeNumber", "PlaceholderErrors", "ClassNameIsRequired", "UnexpectedSpace", "placeholders", "parsePlaceholder", "assertNoSpace", "finishPlaceholder", "chStartsBindingIdentifier", "verifyBreakContinue", "isBreak", "parseStatementOrSloppyAnnexBFunctionDeclaration", "stmtPlaceholder", "parseBlock", "createNewLexicalScope", "parseFunctionId", "requireId", "parseClassBody", "startsWith", "maybeParseExportDefaultSpecifier", "_specifiers", "checkExport", "filter", "maybeParseStarImportSpecifier", "parseNamedImportSpecifiers", "parseImportSource", "v8intrinsic", "parseV8Intrinsic", "v8IntrinsicStartLoc", "parseIdentifierName", "PIPELINE_PROPOSALS", "TOPIC_TOKENS", "validatePlugins", "pluginsMap", "decoratorsBeforeExport", "allowCallParenthesized", "_pluginsMap$get", "proposalList", "p", "tupleSyntaxIsHash", "syntaxType", "tokenList", "version", "RECORD_AND_TUPLE_SYNTAX_TYPES", "missingPlugins", "mixinPlugins", "mixinPluginNames", "defaultOptions", "sourceFilename", "allowAwaitOutsideFunction", "allowReturnOutsideFunction", "allowNewTargetOutsideFunction", "allowImportExportEverywhere", "allowSuperOutsideMethod", "allowUndeclaredExports", "createImportExpressions", "createParenthesizedExpressions", "getOptions", "opts", "_opts$key", "ExpressionParser", "checkProto", "isRecord", "protoRef", "used", "shouldExitDescending", "disallowIn", "disallowInAnd", "parseExpressionBase", "allowInAnd", "parseMaybeAssignDisallowIn", "resultError", "_resultError$loc", "parseYield", "ownExpressionErrors", "parseMaybeConditional", "startIndex", "parseExprOps", "parseMaybeUnaryOrPrivate", "op", "prec", "checkPipelineAtInfixOperator", "logical", "coalesce", "parseExprOpRightExpr", "finishedNode", "nextOp", "withTopicBindingContext", "parseHackPipeBody", "parseSmartPipelineBodyInStyle", "parseExprOpBaseRightExpr", "withSoloAwaitPermittingContext", "parseFSharpPipelineBody", "_body$extra", "topicReferenceWasUsedInCurrentContext", "checkExponentialAfterUnary", "isAwait", "recordAwaitIfAllowed", "parseAwait", "update", "isDelete", "parseUpdate", "isAmbiguousAwait", "updateExpressionNode", "parseExprSubscripts", "maybeAsyncArrow", "parseBind", "parseCoverCallAndAsyncArrowHead", "parseMember", "parseNoCallExpr", "tag", "quasi", "dynamicImport", "allowPlaceholder", "nodeForExtra", "oldInFSharpPipelineDirectBody", "addTrailingCommaExtraToNode", "parseExprListItem", "_call$extra", "parseSuper", "parseImportMetaProperty", "parseImportCall", "parseDo", "parseFunctionOrFunctionSent", "parseDecorators", "parseNewOrNewTarget", "parseTopicReferenceThenEqualsSign", "parseTopicReference", "pipeProposal", "lookaheadCh", "parseModuleExpression", "parseAsyncFunctionExpression", "parseAsyncArrowUnaryFunction", "topicTokenType", "topicTokenValue", "finishTopicReference", "testTopicReferenceConfiguration", "topicReferenceIsAllowedInCurrentContext", "registerTopicReference", "meta", "parseMetaProperty", "parseFunction", "isSource", "innerStartLoc", "spreadStartLoc", "optionalCommaStartLoc", "spreadNodeStartLoc", "innerEndLoc", "arrowNode", "wrapParenthesis", "parenExpression", "metaProp", "parseNew", "parseExprList", "parseTemplateElement", "isTagged", "elemStart", "elem", "isTail", "endOffset", "elemEnd", "cooked", "tail", "curElt", "quasis", "substitutions", "propHash", "parsePropertyDefinition", "maybeAsyncOrAccessorProp", "keyName", "_params", "finishedProp", "generator", "isExpression", "hasStrictModeDirective", "nonSimple", "isSimpleParamList", "formalParameters", "isAwaitAllowed", "delegating", "delegate", "childExpr", "isSimpleReference", "checkSmartPipeTopicBodyEarlyErrors", "callback", "outerContextTopicState", "withSmartMixTopicForbiddingContext", "outerContextSoloAwaitState", "ParamKind", "ret", "revertScopes", "parseProgram", "loopLabel", "switchLabel", "loneSurrogate", "keywordRelationalOperator", "babel7CompatTokens", "hashEndPos", "hashEndLoc", "backquoteEnd", "backquoteEndLoc", "startToken", "templateValue", "templateElementEnd", "templateElementEndLoc", "endToken", "StatementParser", "interpreter", "parseInterpreterDirective", "finishedProgram", "stmtToDirective", "directiveLiteral", "hasFollowingBindingAtom", "endCh", "chStartsBindingPattern", "hasInLineFollowingBindingIdentifierOrBrace", "startsUsingForOf", "startsAwaitUsing", "parseModuleItem", "ParseStatementFlag", "parseStatementListItem", "allowLabeledFunction", "parseStatement", "allowDeclaration", "allowFunctionDeclaration", "parseBreakContinueStatement", "parseDebuggerStatement", "parseDoWhileStatement", "parseForStatement", "parseIfStatement", "parseReturnStatement", "parseSwitchStatement", "parseThrowStatement", "parseTryStatement", "parseWhileStatement", "parseWithStatement", "parseEmptyStatement", "nextTokenCharCode", "isAsyncFunction", "maybeName", "parseLabeledStatement", "decoratorsEnabledBeforeExport", "maybeDecorators", "classNode", "exportNode", "allowExport", "paramsStartLoc", "lab", "parseHeaderExpression", "awaitAt", "parseFor", "startsWithLet", "startsWithAwaitUsing", "starsWithUsingDeclaration", "isLetOrUsing", "initNode", "parseVar", "isForIn", "parseForIn", "startsWithAsync", "isForOf", "isHangingDeclaration", "ParseFunctionFlag", "discriminant", "cases", "cur", "sawDefault", "isCase", "block", "handler", "clause", "finalizer", "statementStart", "parsedNonDirective", "await", "isFor", "hangingDeclaration", "isDeclaration", "hadConstructor", "publicMethod", "privateMethod", "publicProp", "privateProp", "accessorProp", "publicMember", "parseClassElementName", "maybeContextualKw", "isPrivate", "maybeQuestionTokenStartLoc", "pushClassPrivateProperty", "pushClassProperty", "pushClassAccessorProperty", "_member$decorators", "parseInitializer", "hasDefault", "parseAfterDefault", "hasStar", "parseAfterNamespace", "isFromRequired", "hasSpecifiers", "maybeParseExportNamedSpecifiers", "hasDeclaration", "maybeParseExportDeclaration", "_node2$declaration", "_ref$specifiers", "isTypeExport", "assertions", "nextType", "hasFrom", "nextAfterFrom", "maybeParseImportAttributes", "checkJSONModuleImport", "checkNames", "isDefault", "isFrom", "_node$specifiers", "_declaration$extra", "nodes", "surrogate", "isJSONModuleImport", "singleBindingType", "_node$assertions", "nonDefaultNamedSpecifier", "find", "phaseIdentifier", "isPrecedingIdImportPhase", "parseImportSourceAndAttributes", "parseNext", "maybeParseDefaultImportSpecifier", "_node$specifiers2", "parseImportAttributes", "attrs", "attrNames", "parseModuleAttributes", "useWith", "importSpecifier", "Parser", "_options", "getParser", "ast", "moduleError", "generateExportedTokenTypes", "internalTokenTypes", "tokTypes", "getParserClass", "parserClassCache", "pluginList", "require_mod", "__commonJSMin", "exports", "peq", "myers_32", "a", "b", "n", "m", "lst", "pv", "mv", "sc", "i", "eq", "xv", "myers_x", "mhc", "phc", "hsize", "vsize", "j", "mv_1", "pv_1", "start_1", "vlen_1", "k", "pb", "mb", "xh", "ph", "mh", "start", "vlen", "score", "distance", "tmp", "closest", "str", "arr", "min_distance", "min_index", "dist", "require_windows", "__commonJSMin", "exports", "module", "isexe", "sync", "fs", "checkPathExt", "path", "options", "pathext", "i", "p", "checkStat", "stat", "cb", "er", "require_mode", "__commonJSMin", "exports", "module", "isexe", "sync", "fs", "path", "options", "cb", "er", "stat", "checkStat", "checkMode", "mod", "uid", "gid", "myUid", "myGid", "u", "g", "o", "ug", "ret", "require_isexe", "__commonJSMin", "exports", "module", "fs", "core", "isexe", "sync", "path", "options", "cb", "resolve", "reject", "er", "is", "require_which", "__commonJSMin", "exports", "module", "isWindows", "path", "COLON", "isexe", "getNotFoundError", "cmd", "getPathInfo", "opt", "colon", "pathEnv", "pathExtExe", "pathExt", "which", "cb", "found", "step", "i", "resolve", "reject", "ppRaw", "pathPart", "pCmd", "p", "subStep", "ii", "ext", "er", "is", "res", "whichSync", "j", "cur", "require_path_key", "__commonJSMin", "exports", "module", "pathKey", "options", "environment", "key", "require_resolveCommand", "__commonJSMin", "exports", "module", "path", "which", "getPathKey", "resolveCommandAttempt", "parsed", "withoutPathExt", "env", "cwd", "hasCustomCwd", "shouldSwitchCwd", "resolved", "resolveCommand", "require_escape", "__commonJSMin", "exports", "module", "metaCharsRegExp", "escapeCommand", "arg", "escapeArgument", "doubleEscapeMetaChars", "require_shebang_regex", "__commonJSMin", "exports", "module", "require_shebang_command", "__commonJSMin", "exports", "module", "shebangRegex", "string", "match", "path", "argument", "binary", "require_readShebang", "__commonJSMin", "exports", "module", "fs", "shebangCommand", "readShebang", "command", "buffer", "fd", "require_parse", "__commonJSMin", "exports", "module", "path", "resolveCommand", "escape", "readShebang", "isWin", "isExecutableRegExp", "isCmdShimRegExp", "detectShebang", "parsed", "shebang", "parseNonShell", "commandFile", "needsShell", "needsDoubleEscapeMetaChars", "arg", "shellCommand", "parse", "command", "args", "options", "require_enoent", "__commonJSMin", "exports", "module", "isWin", "notFoundError", "original", "syscall", "hookChildProcess", "cp", "parsed", "originalEmit", "name", "arg1", "err", "verifyENOENT", "status", "verifyENOENTSync", "require_cross_spawn", "__commonJSMin", "exports", "module", "cp", "parse", "enoent", "spawn", "command", "args", "options", "parsed", "spawned", "spawnSync", "result", "cli_exports", "__toCommonJS", "import_core", "import_node", "import_server", "import_mri", "import_promises", "import_prettier", "prettierFormat", "code", "parser", "filePath", "configFile", "prettier", "config", "error", "import_http", "PREVIEW_URL_QS", "FRAMEWORK_QS", "PLATFORM_QS", "NODE_VERSION_QS", "KHULNASOFT_AUTH_CONNECT_PATH", "KHULNASOFT_AUTH_RETURN_PATH", "DEV_TOOLS_API_PATH", "DEV_TOOLS_CLIENT_SCRIPT_PATH", "DEV_TOOLS_SERVER_CLOSE_PATH", "import_os", "import_path", "import_fs", "ansiRegex", "onlyFirst", "pattern", "regex", "stripAnsi", "string", "T", "e", "j", "eaw", "module", "character", "x", "y", "codePoint", "code", "stringToArray", "characters", "len", "i", "text", "start", "end", "result", "eawLen", "chars", "char", "charLen", "emojiRegex", "uD", "DD", "stringWidth", "options", "ambiguousCharacterWidth", "width", "eastAsianWidth", "ANSI_BACKGROUND_OFFSET", "wrapAnsi16", "offset", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "styles", "foregroundColorNames", "backgroundColorNames", "assembleStyles", "codes", "groupName", "group", "styleName", "style", "hex", "matches", "colorString", "integer", "remainder", "value", "ansiStyles", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "wrapAnsiHyperlink", "uri", "wordLengths", "wrapWord", "rows", "word", "columns", "isInsideEscape", "isInsideLinkEscape", "visible", "index", "characterLength", "stringVisibleTrimSpacesRight", "words", "last", "exec", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "remainingColumns", "breaksStartingThisLine", "row", "pre", "groups", "wrapAnsi", "line", "f", "d", "r", "t", "o", "diffLines", "a", "b", "aLines", "bLines", "diff", "cancel", "isCancel", "setRawMode", "input", "aliases", "keys", "Prompt", "render", "stdin", "output", "stdout", "opts", "trackValue", "__publicField", "sink", "WriteStream", "chunk", "encoding", "done", "readline", "resolve", "reject", "cursor", "event", "cb", "arr", "data", "cbs", "cleanup", "subscriber", "key", "problem", "lines", "wrap", "frame", "diffLine", "erase", "newLines", "ConfirmPrompt", "confirm", "o", "r", "i", "s", "t", "l", "Prompt", "opts", "__publicField", "value", "char", "key", "allSelected", "v", "selected", "wD", "yD", "e", "u", "F", "Z", "u$1", "Prompt", "opts", "__publicField", "value", "key", "TD", "jD", "e", "u", "F", "MD", "TextPrompt", "Prompt", "opts", "__publicField", "color", "s1", "s2", "isWindows", "block", "input", "stdin", "output", "stdout", "overwrite", "hideCursor", "rl", "clear", "data", "name", "cursor", "isUnicodeSupported", "process", "unicode", "s", "c", "fallback", "S_STEP_ACTIVE", "S_STEP_CANCEL", "S_STEP_ERROR", "S_STEP_SUBMIT", "S_BAR_START", "S_BAR", "S_BAR_END", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_CHECKBOX_ACTIVE", "S_CHECKBOX_SELECTED", "S_CHECKBOX_INACTIVE", "S_PASSWORD_MASK", "S_BAR_H", "S_CORNER_TOP_RIGHT", "S_CONNECT_LEFT", "S_CORNER_BOTTOM_RIGHT", "S_INFO", "S_SUCCESS", "S_WARN", "S_ERROR", "symbol", "state", "color", "limitOptions", "params", "cursor", "options", "style", "paramMaxItems", "outputMaxItems", "maxItems", "slidingWindowLocation", "shouldRenderTopEllipsis", "shouldRenderBottomEllipsis", "option", "i", "arr", "isTopLimit", "isBottomLimit", "text", "opts", "TextPrompt", "title", "placeholder", "value", "confirm", "opts", "active", "inactive", "ConfirmPrompt", "title", "color", "S_BAR", "symbol", "value", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_BAR_END", "select", "opt", "option", "state", "label", "SelectPrompt", "limitOptions", "item", "multiselect", "opts", "opt", "option", "state", "label", "color", "S_CHECKBOX_ACTIVE", "S_CHECKBOX_SELECTED", "S_CHECKBOX_INACTIVE", "MultiSelectPrompt", "selected", "title", "S_BAR", "symbol", "styleOption", "active", "value", "footer", "ln", "i", "S_BAR_END", "limitOptions", "cancel", "message", "color", "S_BAR_END", "intro", "title", "S_BAR_START", "outro", "S_BAR", "log", "symbol", "parts", "firstLine", "lines", "ln", "S_INFO", "S_SUCCESS", "S_STEP_SUBMIT", "S_WARN", "S_ERROR", "spinner", "frames", "unicode", "delay", "unblock", "loop", "isSpinnerActive", "_message", "handleExit", "code", "msg", "stop", "errorEventHandler", "signalEventHandler", "registerHooks", "clearHooks", "start", "block", "frameIndex", "dotsTimer", "frame", "loadingDots", "cursor", "erase", "step", "S_STEP_CANCEL", "S_STEP_ERROR", "import_picocolors", "Sentry", "import_typescript", "Sentry", "import_picocolors", "hasTsconfig", "sys", "tsconfigPath", "skipFolders", "findKhulnasoftRegistry", "defaultFolder", "walk", "root", "depth", "files", "file", "filePath", "stat", "result", "registryFileName", "findPackageJson", "dir", "fsRoot", "i", "pkgJsonPath", "content", "findUpNodeModules", "p", "nodeModulesDir", "recursiveFindDir", "findDirectoryName", "itemNames", "itemName", "itemPath", "foundDir", "r", "import_which_pm_runs", "isMapperFile", "fileName", "getImportPath", "sys", "containingModulePath", "moduleToImportPath", "normalizePathSlash", "p", "path", "getComponentImportNameFilePath", "filePath", "ext", "parts", "getComponentImportName", "str", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportPath", "absFilePath", "relFilePath", "frameworks", "f", "getDisplayFilePath", "part", "sortComponents", "cmps", "a", "b", "getComponentId", "exportName", "externalImportPath", "getLocalAppId", "isNumber", "v", "isBoolean", "isString", "isValidJsxTag", "tag", "clone", "obj", "shouldSkipFolder", "skipFolders", "folder", "getPackageManager", "detected", "detectPackageManager", "detectFrameworks", "sys", "frameworks", "pkgJson", "findPackageJson", "depFrameworks", "detectFrameworksFromPackageJson", "detectTurbopack", "depNames", "depName", "FRAMEWORKS", "f", "payload", "VERSION_RESOLVER", "parseSemanticVersionNumber", "versionFragment", "parsed", "packageManager", "getPackageManager", "command", "stdout", "nextInfo", "version", "major", "minor", "patch", "getKhulnasoftCache", "sys", "cachePath", "getCachePath", "contents", "setKhulnasoftCache", "cache", "rootDir", "getDotEnvValue", "sys", "dotEnvFileNames", "envKey", "envInfo", "dotEnvFileName", "envPath", "envVars", "parseDotEnvFile", "value", "parseDotEnvFile", "sys", "envPath", "envContent", "parseDotEnvContent", "envVars", "lines", "match", "DOTENV_LINE", "key", "value", "maybeQuote", "setDotEnvVar", "comment", "getNextApiKey", "sys", "getDotEnvValue", "NEXT_KHULNASOFT_API_KEY_ENV", "setNextApiKey", "publicApiKey", "env", "modifiedType", "setDotEnvVar", "SDK_VERSIONS", "SPACE_KIND", "codeToSource", "sys", "code", "codeToStatement", "sourceFile", "sourceToCode", "node", "removeComments", "printer", "setObjectExpressionProperty", "sys", "obj", "propName", "propValue", "deleteIfNullOrUndefined", "props", "p", "i", "getObjLiteralPropertyIndex", "_", "j", "valueToExpression", "getTextOfPropertyName", "expressionToValue", "exp", "convertArrayExpressionToJsArray", "objectExpressionToObjectValue", "objectLiteral", "prop", "attrName", "arr", "el", "expression", "val", "valueToTsExpression", "refs", "arrayToArrayExpression", "objectToObjectLiteral", "list", "newList", "l", "newProperties", "key", "parseComponentSourcePropsFromNode", "sys", "typeChecker", "fnNode", "inputs", "properties", "fnParams", "propsNode", "type", "classDecl", "extendTypes", "h", "extendType", "typeArguments", "propsTypeNode", "callSignatures", "params", "symbol", "input", "parseComponentSourceInputFromSymbol", "shouldIncludeInput", "parseComponentSourceInputFromJsDocs", "value", "propName", "khulnasoftInputType", "nonPrimitiveType", "nodeType", "typeString", "normlizedKhulnasoftType", "normalizeKhulnasoftInputType", "isValidKhulnasoftObjectType", "t", "resolvedType", "resolveType", "hasQuotes", "removeQuotes", "jsDocComments", "jsDoc", "tag", "jsDocType", "jsDocPropertyTags", "jsDocPropertyTag", "paramPropName", "typeExp", "VALID_OBJECT_TYPES", "INPUT_TYPES", "i", "hasQuotes", "text", "removeQuotes", "resolveType", "sys", "checker", "type", "set", "parseDocsType", "hasTrue", "hasFalse", "parts", "p", "typeToString", "TYPE_FORMAT_FLAGS", "t", "shouldIncludeInput", "input", "propName", "thirdChar", "PROP_BLACKLIST", "s", "parseRegisteredComponentInfo", "sys", "cmpInfo", "cmpObjLit", "p", "propName", "getTextOfPropertyName", "registeredInputs", "parseRegisteredComponentInputs", "mergeComponentInputs", "meta", "expressionToValue", "arr", "inputs", "elm", "parseRegisteredComponentInput", "obj", "khulnasoftInput", "cmpInput", "normalizeKhulnasoftInput", "updateComponentObjLiteralInfoProperties", "cmpObjExp", "khulnasoftCmp", "mapDevToolsCmpToKhulnasoftCmp", "setObjectExpressionProperty", "updateComponentObjLiteralInputsProperty", "sortComponentInfoProperties", "arrExp", "props", "inputsIndex", "inputsObj", "updateComponentInputsArrayLiteralExp", "i", "mapDevToolsInputToKhulnasoftInput", "isString", "isNumber", "isBoolean", "objLiteralExps", "inputName", "inputValue", "input", "updateComponentInputObjLiteralExp", "a", "b", "aProp", "bProp", "aInit", "bInit", "aName", "bName", "index", "prop", "updateComponentInputValue", "newInputObj", "objLiteralExp", "propAssignments", "inputKeys", "k", "inputKey", "updateComponentInputPropAssignment", "sortComponentInputProperties", "propIndex", "valueToExpression", "cmp", "componentAcceptsChildren", "normalizedKhulnasoftType", "normalizeKhulnasoftInputType", "normalizeComponentInput", "hasChildrenProp", "hasJsxProp", "tsType", "aIndex", "INFO_PROP_SORT", "bIndex", "INPUT_PROP_SORT", "componentHasAcceptChildrenProp", "initializer", "createNextRegisteredComponent", "sys", "cmpInfo", "code", "importPath", "getImportPath", "registerStatement", "codeToStatement", "updateNextRegisteredComponent", "callExp", "args", "cmpObjExp", "updateComponentObjLiteralInfoProperties", "createTsProgram", "sys", "filePaths", "overrideTsOptions", "nodeModulesPath", "findUpNodeModules", "tsLibDir", "existsCache", "host", "p", "nm", "NODE_MODULE_CACHE", "codeToSource", "c", "fileName", "ext", "LIB_CACHE", "MissingTsLibError", "content", "createHostProgram", "e", "fetchLib", "programOpts", "tsConfigPath", "options", "TSCONFIG_CACHE", "configFile", "_", "clone", "getTypeChecker", "filePath", "tsProgram", "sourceFile", "libName", "libUrl", "PENDING_LIB_CACHE", "rsp", "transpileFile", "opts", "code", "transpileModule", "result", "output", "d", "ensureImport", "sys", "sourceFile", "opts", "moduleType", "namedImport", "ensureNamedImport", "ensureDefaultImport", "importPath", "isTypeOnly", "ensureCjsImports", "ensureEsmImports", "defaultImport", "statements", "lastImportIndex", "madeNameImportChange", "madeDefaultImportChange", "i", "n", "existingNamedImports", "namedImports", "e", "a", "b", "defaultIdentifier", "namedBindings", "newImport", "lastRequireIndex", "varStatement", "d", "declarations", "decl", "requireCallExp", "requireCallExpName", "requireCallExpArg", "elements", "newRequire", "getExportedStatements", "sys", "sourceFile", "moduleType", "getCjsExportedStatements", "getEsmExportedStatements", "exports", "s", "elm", "identifierName", "s2", "d", "isDefaultExport", "exportedIdentifier", "m", "left", "right", "getImportPathFromIdentifier", "sys", "sourceFile", "identifierName", "s", "elm", "getFilePathFromIdentifier", "containerPath", "filePath", "resolveComponentPath", "relFilePath", "getDisplayFilePath", "findVariableStatement", "variableName", "i", "statement", "declaration", "findArrayStatementInitializer", "hasJsxNode", "n", "isJsxNode", "foundJsx", "c", "ext", "RESOLVE_EXTS", "tryExt", "checkPath", "getSourceDependencies", "sys", "typeChecker", "fnNode", "symbol", "valueDeclaration", "filePath", "moduleName", "getModuleNameFromPath", "normalizePathSlash", "parts", "nodeModuleIndex", "moduleParts", "getAppDependencies", "cmps", "deps", "cmp", "dep", "d", "a", "b", "getImportedStatements", "sys", "sourceFile", "moduleType", "getCjsImportedStatements", "getEsmImportedStatements", "externalImportRegex", "exports", "s", "n", "_sys", "_sourceFile", "parseReactAllComponentSourceInputs", "sys", "components", "c", "tsProgram", "createTsProgram", "typeChecker", "cmp", "sourceFile", "typedSrcCmp", "getReactComponentsFromSourceFile", "t", "parseComponentSourcePropsFromNode", "parseReactComponentSourceInputs", "srcCmp", "includeImports", "getTypeChecker", "getReactComponentsFromPath", "filePath", "ext", "code", "getReactComponentsFromCode", "codeToSource", "fileCmps", "s", "exports", "getExportedStatements", "getImportedStatements", "exp", "sCmps", "getReactComponentSource", "srcCmps", "relFilePath", "importPath", "getComponentImportPath", "declaration", "isValidJsxTag", "cmpExp", "getReactComponentExpression", "cmpName", "exportName", "exportType", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportNameFilePath", "fnName", "modulePath", "moduleSpecifier", "closestExportDeclaration", "closestImportDeclaration", "symbol", "exportedComponentNames", "extractReactComponentsFromModule", "node", "x", "hasJsxNode", "getSourceDependencies", "args", "reactIdentifier", "forwardRefIdentifier", "expIdentifier", "nameIdentifier", "callSignatures", "expression", "asExpression", "componentExp", "getReactSourceComponentsFromDir", "cmps", "sourceFiles", "shouldSkipFolder", "SKIP_FOLDERS", "a", "b", "moduleSymbol", "exportedSymbols", "isLikelyReactComponent", "importName", "error", "aliasedDeclaration", "signature", "returnType", "isJsxElement", "clause", "type", "sig", "typeString", "getNextSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "SKIP_APP_FILES", "filePath", "fileCmps", "getReactComponentsFromSourceFile", "isMapperFile", "a", "b", "normalizeImports", "sys", "sourceFile", "externalImportStatements", "importStatements", "unknownImportStatements", "statements", "statement", "importPath", "importClause", "sortImports", "normalizeLineBreaks", "code", "lines", "l", "foundImport", "i", "line", "a", "b", "aText", "getImportName", "bText", "s", "namedBindings", "ensureUseClientStringLiteral", "removeUseClientStringLiteral", "normalizeRegisteredArrayElements", "elements", "aName", "getNameProperty", "bName", "obj", "prop", "p", "getTextOfPropertyName", "parseNextRegistryFromFile", "sys", "code", "parseNextRegistryFromCode", "codeToSource", "sourceFile", "SDK_VERSIONS", "parseNextRegistryFromSourceSdkGen2", "parseNextRegistryFromSource", "cmps", "i", "s", "exp", "propAccessExp", "propAccessExpIdentifier", "args", "infoArg", "cmpArg", "fnName", "wrappedCmpArg", "checkWrapperFunction", "cmp", "parseNextRegisteredDynamicComponent", "cmpArgArgs", "parseNextRegisteredIdentifierComponent", "sortComponents", "node", "statementIndex", "dynamicArg", "withChildrenWrapper", "importArgArgs", "importArgArg", "importBody", "importPathArg", "importPath", "resolvedPath", "resolveNextImportPath", "getComponentImportPath", "getComponentDisplayNameFromFilePath", "paranthesizedExp", "awaitExpr", "callExp", "getComponentDisplayName", "parseRegisteredComponentInfo", "getDisplayFilePath", "getComponentId", "identifierArg", "importDeclarations", "defaultImportDeclaration", "namedImportDeclaration", "e", "resolveComponentPath", "ensureKhulnasoftIsInitialized", "typescriptEnabled", "isApiKeyInitialized", "lastImportIndex", "statements", "envKeyExpression", "NEXT_KHULNASOFT_API_KEY_ENV", "nonNullEnvKeyExpression", "initializeKhulnasoftApiKey", "findArrayStatementInitializer", "cmpElm", "parseNextRegisteredComponentSdkGen2", "cmpObjLit", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "getFilePathFromIdentifier", "removeUnusedImports", "sys", "sourceFile", "statements", "madeUpdates", "importDec", "removeImportDeclaration", "namedBindings", "namedBindingsElements", "j", "namedImportElement", "importName", "namedImportFn", "isIdentifierFound", "updatedImport", "s", "node", "identifier", "foundIdentifier", "visit", "childNode", "updateRegistry", "cmpId", "srcCmps", "regCmps", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "addCmpToRegistry", "removeCmpFromRegistry", "updateRegisteredCmp", "nodeIndex", "clone", "srcCmpInfo", "c", "regCmpInfo", "i", "updateCmpInfoValues", "input", "updateCmpInputValues", "mergeComponents", "sourceComponents", "registeredCmps", "cmps", "sortComponents", "r", "cmp", "normalizeComponentInput", "a", "b", "regCmp", "componentAcceptsChildren", "externalCmp", "cmpInfo", "isString", "cmpInput", "isNumber", "isBoolean", "createReactTsProgram", "sys", "entryPaths", "recursive", "childDir", "itemNames", "itemName", "itemPath", "ext", "createTsProgram", "ensureArrayStatement", "sys", "sourceFile", "opts", "findVariableStatement", "appendArrayStatement", "arrayType", "initializer", "variableDeclaration", "variableDeclarationList", "exportModifier", "variableStatement", "statements", "nextComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "typescriptEnabled", "nextApiKey", "getNextSourceComponentsFromDir", "parseNextRegistryFromFile", "hasTsconfig", "getNextApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "SDK_VERSIONS", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getNextRegisteredComponentSourceSdkGen2", "createNextRegisteredComponentSdkGen2", "element", "updateComponentObjLiteralInfoProperties", "createNextComponentPropertyAssignmentSdkGen2", "statements", "normalizeRegisteredArrayElements", "ensureNextComponentImportStatements", "ensureImport", "ensureArrayStatement", "createNextRegisteredComponent", "updateNextRegisteredComponent", "ensureKhulnasoftIsInitialized", "removeUnusedImports", "normalizeImports", "removeUseClientStringLiteral", "code", "sourceToCode", "normalizeLineBreaks", "ensureUseClientStringLiteral", "identifier", "getDynamicComponentImport", "createNextAcceptChildrenPropertyAssignmentSdkGen2", "s", "findArrayStatementInitializer", "ex", "i", "parseNextRegisteredComponentSdkGen2", "regCmp", "importPath", "getImportPath", "useArrowFunction", "arrowFunctionBody", "arrowFunction", "nextEnsureKhulnasoftSetup", "sys", "modifiedFiles", "counterCmpPath", "nextEnsureCounterComponent", "nextEnsureKhulnasoftRegistry", "nextAppEnsureKhulnasoftSetup", "nextPagesEnsureKhulnasoftSetup", "nextEnsureFigmaImportPageSetup", "nextAppEnsureFigmaImportSetup", "nextPagesEnsureFigmaImportSetup", "appDir", "routeFileName", "routePath", "code", "getNextAppRoute", "getNextAppKhulnasoftComponent", "ts", "SDK_VERSIONS", "getImportPath", "NEXT_KHULNASOFT_API_KEY_ENV", "generatePagePropsType", "modelName", "buildContentImport", "pagesDir", "getNextPagesRoute", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "getNextKhulnasoftRegistryReactGen2", "counterCmp", "nextComponentRegistry", "c", "detectReactSdkVersion", "sys", "pkgJson", "findPackageJson", "depNames", "SDK_VERSIONS", "createNextDevTools", "sys", "nextSys", "createNextDevToolsSys", "nextEnsureKhulnasoftSetup", "nextEnsureFigmaImportPageSetup", "opts", "nextComponentRegistry", "pkgName", "r", "c", "getNextApiKey", "setNextApiKey", "SDK_VERSIONS", "getKhulnasoftCache", "cache", "setKhulnasoftCache", "rootDir", "srcDir", "nextConfigPath", "getNextConfigPath", "typescriptEnabled", "hasTsconfig", "nextFramework", "f", "features", "externalPackages", "path", "realFiles", "detectReactSdkVersion", "srcAppDir", "srcPagesDir", "findKhulnasoftRegistry", "appDir", "pagesDir", "nextConfigTsPath", "nextConfigMjsPath", "nextConfigJsPath", "getQwikApiKey", "sys", "getDotEnvValue", "QWIK_KHULNASOFT_API_KEY_ENV", "setQwikApiKey", "publicApiKey", "setKhulnasoftPublicApiKeyEnvVar", "env", "modifiedType", "setDotEnvVar", "ensureComments", "code", "commentText", "lineTextAfterComments", "lines", "lineIndex", "l", "commentLines", "c", "getQwikComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "QWIK_SKIP", "filePath", "fileCmps", "getQwikComponentsFromSourceFile", "getQwikComponentsFromPath", "code", "getQwikComponentsFromCode", "codeToSource", "exports", "getExportedStatements", "exp", "sCmp", "getQwikComponentSource", "_typeChecker", "relFilePath", "importPath", "getComponentImportPath", "declaration", "cmpExp", "getQwikComponentExpression", "cmpName", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportNameFilePath", "arg", "parseQwikComponentSourceInputs", "sys", "srcCmp", "fnNode", "sourceFile", "typeChecker", "getTypeChecker", "getQwikComponentsFromSourceFile", "t", "parseComponentSourcePropsFromNode", "qwikEnsureKhulnasoftSetup", "sys", "qwikEnsureKhulnasoftRegistry", "modifiedFiles", "DEFAULT_REGISTRY", "parseQwikRegistryFromFile", "sys", "qwikEnsureKhulnasoftRegistry", "code", "parseQwikRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseQwikRegisteredComponent", "sortComponents", "cmpObjLit", "p", "getTextOfPropertyName", "identifierName", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getQwikComponentsFromPath", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "createQwikTsProgram", "sys", "entryPaths", "recursive", "childDir", "itemNames", "itemName", "itemPath", "ext", "createTsProgram", "qwikComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createQwikTsProgram", "srcCmps", "parsedRegistry", "qwikApiKey", "getQwikComponentsFromDir", "parseQwikRegistryFromFile", "getQwikApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "srcCmp", "sourceFile", "cmpInfo", "sourceInputs", "parseQwikComponentSourceInputs", "mergeComponentInputs", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getQwikRegisteredComponentSource", "madeChanges", "createQwikRegisteredComponent", "updateComponentObjLiteralInfoProperties", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "ensureComments", "COMMENTS", "s", "findArrayStatementInitializer", "ex", "i", "parseQwikRegisteredComponent", "createQwikCityDevTools", "sys", "qwikSys", "createQwikDevToolsSys", "qwikEnsureKhulnasoftSetup", "opts", "qwikComponentRegistry", "_pkgName", "r", "c", "getQwikApiKey", "setQwikApiKey", "_opts", "getKhulnasoftCache", "cache", "setKhulnasoftCache", "componentsDir", "recursiveFindDir", "registryPath", "findKhulnasoftRegistry", "envPath", "getRemixApiKey", "sys", "getDotEnvValue", "REMIX_KHULNASOFT_API_KEY_ENV", "setRemixApiKey", "publicApiKey", "env", "modifiedType", "setDotEnvVar", "SKIP_FOLDERS", "getRemixSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "buildDir", "sourceFile", "fileName", "shouldSkipFolder", "SKIP_APP_FILES", "filePath", "fileCmps", "getReactComponentsFromSourceFile", "parseRemixRegistryFromFile", "sys", "remixEnsureKhulnasoftRegistry", "code", "parseRemixRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseRemixRegisteredComponent", "sortComponents", "cmpObjLit", "SDK_VERSIONS", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "arg", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getReactComponentsFromPath", "isMapperFile", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "remixComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "remixApiKey", "getRemixSourceComponentsFromDir", "parseRemixRegistryFromFile", "getRemixApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getRemixRegisteredComponentSource", "createRemixRegisteredComponent", "element", "updateComponentObjLiteralInfoProperties", "createRemixComponentPropertyAssignment", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "sdkImportPath", "SDK_VERSIONS", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "identifier", "initializer", "s", "findArrayStatementInitializer", "ex", "i", "parseRemixRegisteredComponent", "remixEnsureKhulnasoftSetup", "sys", "modifiedFiles", "counterCmpPath", "remixEnsureCounterComponent", "remixEnsureKhulnasoftRegistry", "remixEnsureCounterRegistered", "remixEnsureAppRoute", "remixEnsureFigmaImportSetup", "remixEnsureFigmaImportRoute", "routeFileName", "routePath", "hasRoute", "code", "getRemixAppRoute", "SDK_VERSIONS", "modelName", "ts", "registryImportPath", "getImportPath", "loaderArgsImport", "loaderArgsType", "envVar", "REMIX_KHULNASOFT_API_KEY_ENV", "f", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "hasCounterCmp", "hasCounterStyles", "counterCmp", "remixComponentRegistry", "c", "getRemixKhulnasoftRegistry", "isSdkGen2", "createRemixDevTools", "sys", "remixSys", "createRemixDevToolsSys", "pathname", "localePathname", "remixEnsureKhulnasoftSetup", "remixEnsureFigmaImportSetup", "opts", "remixComponentRegistry", "pkgName", "r", "c", "getRemixApiKey", "setRemixApiKey", "SDK_VERSIONS", "getKhulnasoftCache", "cache", "setKhulnasoftCache", "remixConfigPath", "getRemixConfigPath", "rootDir", "routesDir", "getRemixRoutesDir", "appDir", "componentsDir", "typescriptEnabled", "hasTsconfig", "registryPath", "findKhulnasoftRegistry", "externalPackages", "hasLocaleParam", "path", "realFiles", "p", "detectReactSdkVersion", "f", "configs", "configName", "configPath", "recursiveFindDir", "getReactApiKey", "sys", "dotEnvFileNames", "publicApiKey", "REACT_VITE_KHULNASOFT_KEY_ENV", "REACT_WEBPACK_KHULNASOFT_KEY_ENV", "getDotEnvValue", "setReactApiKey", "env", "modifiedType", "setDotEnvVar", "createReactRegisteredComponent", "sys", "cmpInfo", "code", "registerStatement", "codeToStatement", "updateReactRegisteredComponent", "callExp", "args", "cmpObjExp", "updateComponentObjLiteralInfoProperties", "parseReactRegistryFromFile", "sys", "code", "parseReactRegistryFromCode", "codeToSource", "sourceFile", "SDK_VERSIONS", "parseReactRegistryFromSourceSdkGen2", "parseReactRegistryFromSource", "cmps", "i", "s", "exp", "propAccessExp", "propAccessExpIdentifier", "args", "infoArg", "cmpArg", "cmp", "parseReactRegisteredIdentifierComponent", "sortComponents", "statementIndex", "identifierArg", "withChildrenWrapper", "importDeclarations", "defaultImportDeclaration", "importPath", "resolveReactImportPath", "getComponentImportPath", "getComponentDisplayNameFromFilePath", "namedImportDeclaration", "e", "resolvedPath", "getComponentDisplayName", "parseRegisteredComponentInfo", "getDisplayFilePath", "getComponentId", "resolveComponentPath", "parseReactRegistryFromSourceSdkGen2", "sys", "sourceFile", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseReactRegisteredComponentSdkGen2", "sortComponents", "cmpObjLit", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "importDeclarations", "defaultImportDeclaration", "importPath", "namedImportDeclaration", "e", "parseRegisteredComponentInfo", "getComponentId", "reactComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "_typescriptEnabled", "reactApiKey", "getReactSourceComponentsFromDir", "parseReactRegistryFromFile", "hasTsconfig", "getReactApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "SDK_VERSIONS", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getReactRegisteredComponentSourceSdkGen2", "createReactRegisteredComponentSdkGen2", "element", "updateComponentObjLiteralInfoProperties", "identifier", "statements", "normalizeRegisteredArrayElements", "ensureReactComponentImportStatements", "ensureImport", "ensureArrayStatement", "createReactRegisteredComponent", "updateReactRegisteredComponent", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "s", "findArrayStatementInitializer", "ex", "i", "parseReactRegisteredComponentSdkGen2", "regCmp", "importPath", "getImportPath", "reactEnsureKhulnasoftSetup", "sys", "modifiedFiles", "counterCmpPath", "reactEnsureCounterComponent", "reactEnsureKhulnasoftRegistry", "code", "getReactAppKhulnasoftComponent", "reactEnsureFigmaImportSetup", "routeFileName", "routePath", "modelName", "ts", "SDK_VERSIONS", "getImportPath", "REACT_VITE_KHULNASOFT_KEY_ENV", "REACT_WEBPACK_KHULNASOFT_KEY_ENV", "getKhulnasoftRegistryReactGen2", "counterCmp", "reactComponentRegistry", "c", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "createReactDevTools", "sys", "reactSys", "createReactDevToolsSys", "reactEnsureKhulnasoftSetup", "reactEnsureFigmaImportSetup", "opts", "reactComponentRegistry", "pkgName", "r", "c", "getReactApiKey", "setReactApiKey", "SDK_VERSIONS", "getKhulnasoftCache", "cache", "setKhulnasoftCache", "reactConfigPath", "getReactConfigPath", "rootDir", "srcDir", "typescriptEnabled", "hasTsconfig", "externalPackages", "path", "realFiles", "p", "detectReactSdkVersion", "findKhulnasoftRegistry", "configs", "configName", "configPath", "getAngularApiKey", "sys", "getEnvValue", "ANGULAR_KHULNASOFT_API_KEY_ENV", "setAngularApiKey", "publicApiKey", "env", "modifiedType", "setEnvValue", "envFileNames", "envKey", "envInfo", "envFileName", "envPath", "value", "parseEnvFile", "envContent", "parseEnvContent", "sourceFile", "codeToSource", "extractedApiKey", "findVariableStatement", "initializer", "prop", "appendApiKey", "key", "s", "declarationList", "declaration", "newProperty", "newProperties", "newInitializer", "newDeclaration", "newDeclarationList", "updatedEnvNode", "updatedEnvContent", "sourceToCode", "code", "getAngularSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "shouldSkipFolder", "SKIP_APP_FILES", "filePath", "fileCmps", "getAngularComponentsFromSourceFile", "a", "b", "SKIP_FOLDERS", "folder", "getAngularComponentsFromPath", "ext", "code", "getAngularComponentsFromCode", "codeToSource", "classStatements", "s", "isComponentDecorator", "reExportedComponents", "getExportedAngularComponentSource", "enumOptions", "extractEnumOptions", "node", "sCmps", "getAngularComponentSource", "parseAngularComponentSourceInputs", "srcCmp", "getTypeChecker", "typedSrcCmp", "t", "parseAngularAllComponentSourceInputs", "sourceComponents", "components", "c", "createTsProgram", "cmp", "parseComponentSourcePropsFromNode", "sourceCmp", "sourceInputs", "mergeComponentInputs", "srcCmps", "relFilePath", "importPath", "getComponentImportPath", "cmpName", "isDefaultExport", "m", "exportName", "exportType", "componentInputs", "member", "decorators", "decorator", "isInputDecorator", "inputType", "typeNode", "getTypeText", "input", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDecoratorInfo", "exportSpecifier", "symbol", "type", "declarations", "declaration", "getTypeName", "exportDeclaration", "modulePath", "moduleSpecifier", "decoratorNameIs", "name", "callExpression", "typeName", "typeAnnotation", "getDecorators", "isCallExpression", "isIdentifier", "isObjectLiteralExpression", "isPropertyAssignment", "isStringLiteral", "SyntaxKind", "selector", "standalone", "expression", "arg", "prop", "angularUpdateAppModule", "sys", "cmpName", "cmpPath", "fileExtension", "fileName", "appModulePath", "appModuleCode", "updatedCode", "angularEnsureAppModuleImports", "code", "content", "sourceFile", "codeToSource", "cmpRelPath", "getImportPath", "ensureImport", "updatedStatements", "s", "updatedClassDeclaration", "modifyNgModuleDecorator", "sourceToCode", "node", "decorators", "decorator", "ngModuleArgs", "updatedObjectLiteral", "appendArrayProperty", "updatedObjectLiteralWithContent", "updatedDecorator", "modifiers", "d", "objectExpression", "propertyName", "itemName", "properties", "pIndex", "p", "getTextOfPropertyName", "prop", "updatedList", "updateArrayItems", "arrayExpression", "itemToBeInserted", "e", "angularAddRoute", "sys", "path", "componentName", "componentPath", "_a", "fileName", "appRoutesPath", "mod", "routes", "r", "newEntry", "i", "e", "import_json5", "angularFixTsConfig", "sys", "tsConfigPath", "tsConfigContent", "tsConfig", "JSON5", "compilerOptions", "paths", "angularEnsureKhulnasoftSetup", "sys", "modifiedFiles", "counterCmpPath", "angularEnsureCounterComponent", "angularEnsureKhulnasoftRegistry", "angularEnsureCounterRegistered", "khulnasoftCmpName", "code", "getAngularKhulnasoftComponent", "angularUpdateAppModule", "appModulePath", "angularAddRoute", "angularEnsureFigmaImportSetup", "figmaImportsCmpName", "fileName", "routePath", "angularFixTsConfig", "getAngularKhulnasoftRegistry", "counterCmp", "angularComponentRegistry", "c", "cmpName", "cmpPath", "pageName", "modelName", "add404", "isStandAloneComponent", "registryImportPath", "getImportPath", "envPath", "environmentImportPath", "template", "ANGULAR_KHULNASOFT_API_KEY_ENV", "ext", "hasCounterCmp", "component", "getCounterComponent", "parseAngularRegistryFromFile", "sys", "angularEnsureKhulnasoftRegistry", "code", "parseAngularRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseAngularRegisteredComponent", "sortComponents", "cmpObjLit", "p", "getTextOfPropertyName", "identifierName", "initializer", "arg", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getAngularComponentsFromPath", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "angularComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "angularApiKey", "getAngularSourceComponentsFromDir", "parseAngularRegistryFromFile", "getAngularApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseAngularAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseAngularComponentSourceInputs", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getAngularRegisteredComponentSource", "createAngularRegisteredComponent", "element", "updateComponentObjLiteralInfoProperties", "createAngularComponentPropertyAssignment", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "identifier", "s", "findArrayStatementInitializer", "ex", "i", "parseAngularRegisteredComponent", "createAngularDevTools", "sys", "angularSys", "createAngularDevToolsSys", "externalPackages", "angularEnsureKhulnasoftSetup", "angularEnsureFigmaImportSetup", "opts", "angularComponentRegistry", "pkgName", "r", "c", "getAngularApiKey", "setAngularApiKey", "_opts", "getKhulnasoftCache", "cache", "setKhulnasoftCache", "angularConfigPath", "getAngularConfigPath", "rootDir", "srcDir", "typescriptEnabled", "hasTsconfig", "appDir", "registryPath", "findKhulnasoftRegistry", "appModuleFileName", "appModulePath", "configPath", "projectPath", "import_compress_json", "exportRegistry", "sys", "devTools", "exportedRegistry", "c", "minimal", "normalizePathSlash", "clone", "compressed", "importRegistry", "registryToImport", "registry", "importedRegistry", "updatedRegistry", "cmpToRegister", "filePath", "cmp", "input", "r", "SUPPORTED_FRAMEWORKS", "SDK_PER_FRAMEWORK", "SDK_VERSIONS", "findAllDependencies", "sys", "rootDir", "packages", "processedPackages", "processPackage", "packageDir", "packageJsonPath", "packageJsonContent", "packageJson", "currentPackage", "packageContents", "item", "error", "mainPackageJsonPath", "mainPackageJsonContent", "mainPackageJson", "allDependencies", "depName", "depPath", "workspace", "workspacePaths", "workspacePath", "fullWorkspacePath", "FRAMEWORK_ADAPTERS", "createQwikCityDevTools", "createNextDevTools", "createRemixDevTools", "createReactDevTools", "createAngularDevTools", "FRAMEWORK_FRIENDLY_NAMES", "SUPPORTED_FRAMEWORKS", "createDevTools", "opts", "detectFrameworks", "framework", "detectTurbopack", "devToolsAdapter", "exportRegistry", "exportedRegistry", "importRegistry", "findAllDependencies", "DEFAULT_NEXT_CONFIG", "import_prompts", "import_fs", "cPlusPlus", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "CPP_PRIMITIVE_TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "RESERVED_KEYWORDS", "RESERVED_TYPES", "TYPE_HINTS", "FUNCTION_HINTS", "CPP_KEYWORDS", "FUNCTION_DISPATCH", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "arduino", "ARDUINO_KW", "ARDUINO", "kws", "bash", "hljs", "regex", "VAR", "BRACED_VAR", "SUBST", "HERE_DOC", "QUOTE_STRING", "ESCAPED_QUOTE", "APOS_STRING", "ESCAPED_APOS", "ARITHMETIC", "SH_LIKE_SHELLS", "KNOWN_SHEBANG", "FUNCTION", "KEYWORDS", "LITERALS", "PATH_MODE", "SHELL_BUILT_INS", "BASH_BUILT_INS", "ZSH_BUILT_INS", "GNU_CORE_UTILS", "c", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "KEYWORDS", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "cpp", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "CPP_PRIMITIVE_TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "RESERVED_KEYWORDS", "RESERVED_TYPES", "TYPE_HINTS", "FUNCTION_HINTS", "CPP_KEYWORDS", "FUNCTION_DISPATCH", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "csharp", "hljs", "BUILT_IN_KEYWORDS", "FUNCTION_MODIFIERS", "LITERAL_KEYWORDS", "NORMAL_KEYWORDS", "CONTEXTUAL_KEYWORDS", "KEYWORDS", "TITLE_MODE", "NUMBERS", "VERBATIM_STRING", "VERBATIM_STRING_NO_LF", "SUBST", "SUBST_NO_LF", "INTERPOLATED_STRING", "INTERPOLATED_VERBATIM_STRING", "INTERPOLATED_VERBATIM_STRING_NO_LF", "STRING", "GENERIC_MODIFIER", "TYPE_IDENT_RE", "AT_IDENTIFIER", "MODES", "hljs", "TAGS", "MEDIA_FEATURES", "PSEUDO_CLASSES", "PSEUDO_ELEMENTS", "ATTRIBUTES", "css", "regex", "modes", "VENDOR_PREFIX", "AT_MODIFIERS", "AT_PROPERTY_RE", "IDENT_RE", "STRINGS", "diff", "hljs", "regex", "go", "hljs", "KEYWORDS", "graphql", "hljs", "regex", "GQL_NAME", "ini", "hljs", "regex", "NUMBERS", "COMMENTS", "VARIABLES", "LITERALS", "STRINGS", "ARRAY", "BARE_KEY", "QUOTED_KEY_DOUBLE_QUOTE", "QUOTED_KEY_SINGLE_QUOTE", "ANY_KEY", "DOTTED_KEY", "decimalDigits", "frac", "hexDigits", "NUMERIC", "recurRegex", "re", "substitution", "depth", "_", "java", "hljs", "regex", "JAVA_IDENT_RE", "GENERIC_IDENT_RE", "KEYWORDS", "ANNOTATION", "PARAMS", "IDENT_RE", "KEYWORDS", "LITERALS", "TYPES", "ERROR_TYPES", "BUILT_IN_GLOBALS", "BUILT_IN_VARIABLES", "BUILT_INS", "javascript", "hljs", "regex", "hasClosingTag", "match", "after", "tag", "IDENT_RE$1", "FRAGMENT", "XML_SELF_CLOSING", "XML_TAG", "response", "afterMatchIndex", "nextChar", "m", "afterMatch", "KEYWORDS$1", "decimalDigits", "frac", "decimalInteger", "NUMBER", "SUBST", "HTML_TEMPLATE", "CSS_TEMPLATE", "GRAPHQL_TEMPLATE", "TEMPLATE_STRING", "COMMENT", "SUBST_INTERNALS", "SUBST_AND_COMMENTS", "PARAMS_CONTAINS", "PARAMS", "CLASS_OR_EXTENDS", "CLASS_REFERENCE", "USE_STRICT", "FUNCTION_DEFINITION", "UPPER_CASE_CONSTANT", "noneOf", "list", "FUNCTION_CALL", "PROPERTY_ACCESS", "GETTER_OR_SETTER", "FUNC_LEAD_IN_RE", "FUNCTION_VARIABLE", "json", "hljs", "ATTRIBUTE", "PUNCTUATION", "LITERALS", "LITERALS_MODE", "decimalDigits", "frac", "hexDigits", "NUMERIC", "kotlin", "hljs", "KEYWORDS", "KEYWORDS_WITH_LABEL", "LABEL", "SUBST", "VARIABLE", "STRING", "ANNOTATION_USE_SITE", "ANNOTATION", "KOTLIN_NUMBER_MODE", "KOTLIN_NESTED_COMMENT", "KOTLIN_PAREN_TYPE", "KOTLIN_PAREN_TYPE2", "MODES", "hljs", "TAGS", "MEDIA_FEATURES", "PSEUDO_CLASSES", "PSEUDO_ELEMENTS", "ATTRIBUTES", "PSEUDO_SELECTORS", "less", "modes", "PSEUDO_SELECTORS$1", "AT_MODIFIERS", "IDENT_RE", "INTERP_IDENT_RE", "RULES", "VALUE_MODES", "STRING_MODE", "c", "IDENT_MODE", "name", "begin", "relevance", "AT_KEYWORDS", "PARENS_MODE", "VALUE_WITH_RULESETS", "MIXIN_GUARD_MODE", "RULE_MODE", "AT_RULE_MODE", "VAR_RULE_MODE", "SELECTOR_MODE", "PSEUDO_SELECTOR_MODE", "lua", "hljs", "OPENING_LONG_BRACKET", "CLOSING_LONG_BRACKET", "LONG_BRACKETS", "COMMENTS", "makefile", "hljs", "VARIABLE", "QUOTE_STRING", "FUNC", "ASSIGNMENT", "META", "TARGET", "markdown", "hljs", "regex", "INLINE_HTML", "HORIZONTAL_RULE", "CODE", "LIST", "LINK_REFERENCE", "URL_SCHEME", "LINK", "BOLD", "ITALIC", "BOLD_WITHOUT_ITALIC", "ITALIC_WITHOUT_BOLD", "CONTAINABLE", "m", "objectivec", "hljs", "API_CLASS", "IDENTIFIER_RE", "KEYWORDS", "CLASS_KEYWORDS", "perl", "hljs", "regex", "KEYWORDS", "REGEX_MODIFIERS", "PERL_KEYWORDS", "SUBST", "METHOD", "VAR", "STRING_CONTAINS", "REGEX_DELIMS", "PAIRED_DOUBLE_RE", "prefix", "open", "close", "middle", "PAIRED_RE", "PERL_DEFAULT_CONTAINS", "php", "hljs", "regex", "NOT_PERL_ETC", "IDENT_RE", "PASCAL_CASE_CLASS_NAME_RE", "VARIABLE", "PREPROCESSOR", "SUBST", "SINGLE_QUOTED", "DOUBLE_QUOTED", "HEREDOC", "m", "resp", "NOWDOC", "WHITESPACE", "STRING", "NUMBER", "LITERALS", "KWS", "BUILT_INS", "KEYWORDS", "items", "result", "item", "normalizeKeywords", "CONSTRUCTOR_CALL", "CONSTANT_REFERENCE", "LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON", "NAMED_ARGUMENT", "PARAMS_MODE", "FUNCTION_INVOKE", "ATTRIBUTE_CONTAINS", "ATTRIBUTES", "phpTemplate", "hljs", "plaintext", "hljs", "python", "hljs", "regex", "IDENT_RE", "RESERVED_WORDS", "KEYWORDS", "PROMPT", "SUBST", "LITERAL_BRACKET", "STRING", "digitpart", "pointfloat", "lookahead", "NUMBER", "COMMENT_TYPE", "PARAMS", "pythonRepl", "hljs", "r", "hljs", "regex", "IDENT_RE", "NUMBER_TYPES_RE", "OPERATORS_RE", "PUNCTUATION_RE", "ruby", "hljs", "regex", "RUBY_METHOD_RE", "CLASS_NAME_RE", "CLASS_NAME_WITH_NAMESPACE_RE", "RUBY_KEYWORDS", "YARDOCTAG", "IRB_OBJECT", "COMMENT_MODES", "SUBST", "STRING", "decimal", "digits", "NUMBER", "PARAMS", "RUBY_DEFAULT_CONTAINS", "IRB_DEFAULT", "rust", "hljs", "regex", "FUNCTION_INVOKE", "NUMBER_SUFFIX", "KEYWORDS", "LITERALS", "BUILTINS", "TYPES", "MODES", "hljs", "TAGS", "MEDIA_FEATURES", "PSEUDO_CLASSES", "PSEUDO_ELEMENTS", "ATTRIBUTES", "scss", "modes", "PSEUDO_ELEMENTS$1", "PSEUDO_CLASSES$1", "AT_IDENTIFIER", "AT_MODIFIERS", "VARIABLE", "shell", "hljs", "sql", "hljs", "regex", "COMMENT_MODE", "STRING", "QUOTED_IDENTIFIER", "LITERALS", "MULTI_WORD_TYPES", "TYPES", "NON_RESERVED_WORDS", "RESERVED_WORDS", "RESERVED_FUNCTIONS", "POSSIBLE_WITHOUT_PARENS", "COMBOS", "FUNCTIONS", "KEYWORDS", "keyword", "VARIABLE", "OPERATOR", "FUNCTION_CALL", "reduceRelevancy", "list", "exceptions", "when", "qualifyFn", "item", "x", "source", "re", "lookahead", "concat", "args", "x", "stripOptionsFromArgs", "opts", "either", "keywordWrapper", "keyword", "dotKeywords", "optionalDotKeywords", "keywordTypes", "keywords", "literals", "precedencegroupKeywords", "numberSignKeywords", "builtIns", "operatorHead", "operatorCharacter", "operator", "identifierHead", "identifierCharacter", "identifier", "typeIdentifier", "keywordAttributes", "availabilityKeywords", "swift", "hljs", "WHITESPACE", "BLOCK_COMMENT", "COMMENTS", "DOT_KEYWORD", "KEYWORD_GUARD", "PLAIN_KEYWORDS", "kw", "REGEX_KEYWORDS", "KEYWORD", "KEYWORDS", "KEYWORD_MODES", "BUILT_IN_GUARD", "BUILT_IN", "BUILT_INS", "OPERATOR_GUARD", "OPERATOR", "OPERATORS", "decimalDigits", "hexDigits", "NUMBER", "ESCAPED_CHARACTER", "rawDelimiter", "ESCAPED_NEWLINE", "INTERPOLATION", "MULTILINE_STRING", "SINGLE_LINE_STRING", "STRING", "REGEXP_CONTENTS", "BARE_REGEXP_LITERAL", "EXTENDED_REGEXP_LITERAL", "begin", "end", "REGEXP", "QUOTED_IDENTIFIER", "IMPLICIT_PARAMETER", "PROPERTY_WRAPPER_PROJECTION", "IDENTIFIERS", "AVAILABLE_ATTRIBUTE", "KEYWORD_ATTRIBUTE", "USER_DEFINED_ATTRIBUTE", "ATTRIBUTES", "TYPE", "GENERIC_ARGUMENTS", "TUPLE_ELEMENT_NAME", "TUPLE", "GENERIC_PARAMETERS", "FUNCTION_PARAMETER_NAME", "FUNCTION_PARAMETERS", "FUNCTION_OR_MACRO", "INIT_SUBSCRIPT", "OPERATOR_DECLARATION", "PRECEDENCEGROUP", "variant", "interpolation", "mode", "submodes", "IDENT_RE", "KEYWORDS", "LITERALS", "TYPES", "ERROR_TYPES", "BUILT_IN_GLOBALS", "BUILT_IN_VARIABLES", "BUILT_INS", "javascript", "hljs", "regex", "hasClosingTag", "match", "after", "tag", "IDENT_RE$1", "FRAGMENT", "XML_SELF_CLOSING", "XML_TAG", "response", "afterMatchIndex", "nextChar", "m", "afterMatch", "KEYWORDS$1", "decimalDigits", "frac", "decimalInteger", "NUMBER", "SUBST", "HTML_TEMPLATE", "CSS_TEMPLATE", "GRAPHQL_TEMPLATE", "TEMPLATE_STRING", "COMMENT", "SUBST_INTERNALS", "SUBST_AND_COMMENTS", "PARAMS_CONTAINS", "PARAMS", "CLASS_OR_EXTENDS", "CLASS_REFERENCE", "USE_STRICT", "FUNCTION_DEFINITION", "UPPER_CASE_CONSTANT", "noneOf", "list", "FUNCTION_CALL", "PROPERTY_ACCESS", "GETTER_OR_SETTER", "FUNC_LEAD_IN_RE", "FUNCTION_VARIABLE", "typescript", "tsLanguage", "NAMESPACE", "INTERFACE", "TS_SPECIFIC_KEYWORDS", "DECORATOR", "swapMode", "mode", "label", "replacement", "indx", "functionDeclaration", "vbnet", "hljs", "regex", "CHARACTER", "STRING", "MM_DD_YYYY", "YYYY_MM_DD", "TIME_12H", "TIME_24H", "DATE", "NUMBER", "LABEL", "DOC_COMMENT", "COMMENT", "wasm", "hljs", "BLOCK_COMMENT", "LINE_COMMENT", "KWS", "FUNCTION_REFERENCE", "ARGUMENT", "PARENS", "NUMBER", "TYPE", "MATH_OPERATIONS", "xml", "hljs", "regex", "TAG_NAME_RE", "XML_IDENT_RE", "XML_ENTITIES", "XML_META_KEYWORDS", "XML_META_PAR_KEYWORDS", "APOS_META_STRING_MODE", "QUOTE_META_STRING_MODE", "TAG_INTERNALS", "yaml", "hljs", "LITERALS", "URI_CHARACTERS", "KEY", "TEMPLATE_VARIABLES", "STRING", "CONTAINER_STRING", "TIMESTAMP", "VALUE_CONTAINER", "OBJECT", "ARRAY", "MODES", "VALUE_MODES", "grammars", "arduino", "bash", "c", "cpp", "csharp", "css", "diff", "go", "graphql", "ini", "java", "javascript", "json", "kotlin", "less", "lua", "makefile", "markdown", "objectivec", "perl", "php", "phpTemplate", "plaintext", "python", "pythonRepl", "r", "ruby", "rust", "scss", "shell", "sql", "swift", "typescript", "vbnet", "wasm", "xml", "yaml", "import_core", "core_default", "HighlightJS", "emptyOptions", "defaultPrefix", "createLowlight", "grammars", "high", "core_default", "register", "highlight", "highlightAuto", "listLanguages", "registerAlias", "registered", "language", "value", "options", "settings", "prefix", "HastEmitter", "result", "root", "data", "subset", "index", "relevance", "name", "current", "grammarsOrName", "grammar", "aliasesOrName", "alias", "key", "aliases", "aliasOrName", "tail", "rawName", "other", "results", "self", "className", "d", "i", "child", "wrapAnsi16", "offset", "code", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "styles", "modifierNames", "foregroundColorNames", "backgroundColorNames", "colorNames", "assembleStyles", "codes", "groupName", "group", "styleName", "style", "hex", "matches", "colorString", "character", "integer", "remainder", "value", "result", "ansiStyles", "ansi_styles_default", "import_node_process", "import_node_os", "import_node_tty", "hasFlag", "flag", "argv", "process", "prefix", "position", "terminatorPosition", "env", "flagForceColor", "envForceColor", "translateLevel", "level", "_supportsColor", "haveStream", "streamIsTTY", "sniffFlags", "noFlagForceColor", "forceColor", "min", "osRelease", "os", "sign", "version", "createSupportsColor", "stream", "options", "supportsColor", "tty", "supports_color_default", "stringReplaceAll", "string", "substring", "replacer", "index", "substringLength", "endIndex", "returnValue", "stringEncaseCRLFWithFirstIndex", "prefix", "postfix", "gotCR", "stdoutColor", "stderrColor", "supports_color_default", "GENERATOR", "STYLER", "IS_EMPTY", "levelMapping", "styles", "applyOptions", "object", "options", "colorLevel", "Chalk", "chalkFactory", "chalk", "strings", "createChalk", "styleName", "style", "ansi_styles_default", "khulnasoft", "createKhulnasoft", "createStyler", "getModelAnsi", "model", "level", "type", "arguments_", "usedModels", "styler", "bgModel", "proto", "open", "close", "parent", "openAll", "closeAll", "self", "_styler", "_isEmpty", "applyStyle", "string", "stringReplaceAll", "lfIndex", "stringEncaseCRLFWithFirstIndex", "chalkStderr", "chalk", "Chalk", "defaultSheet", "createEmphasize", "grammars", "lowlight", "createLowlight", "highlight", "highlightAuto", "language", "value", "sheet", "result", "data", "visit", "options", "config", "settings", "node", "names", "d", "scoped", "style", "content", "key", "parts", "color", "all", "nodes", "index", "import_readline", "import_picocolors", "import_path", "import_picocolors", "Amplitude", "Sentry", "version", "import_promises", "import_node_crypto", "import_node_fs", "import_node_os", "import_node_path", "import_prettier", "import_typescript", "import_launch_editor", "import_node_child_process", "dist_exports", "__export", "MagicastError", "khulnasofts", "detectCodeFormat", "generateCode", "loadFile", "parseExpression", "parseModule", "writeFile", "import_node_fs", "import_source_map_js", "babelParser", "sharedPlugin", "fork", "types", "typesPlugin", "Type", "builtin", "isNumber", "geq", "than", "value", "defaults", "naiveIsPrimitive", "isPrimitive", "type", "maybeSetModuleExports", "moduleGetter", "nodeModule", "originalExports", "defaultExport", "__defProp$2", "__defNormalProp$2", "obj", "key", "__publicField$2", "Op$1", "objToStr", "hasOwn$6", "BaseType", "deep", "str", "shallowStringify", "elemType", "ArrayType", "elem", "IdentityType", "result", "ObjectType", "fields", "field", "OrType", "PredicateType", "name", "predicate", "Def", "_Def", "typeName", "that", "allFields", "checkFieldByName", "child", "supertypeNames", "bases", "i", "baseName", "Field", "defaultFn", "hidden", "_fork", "isArray", "isObject", "name2", "bicfIndex", "builtInCtorFns", "builtInCtorTypes", "defCache", "DefImpl", "defBuiltInType", "example", "objStr", "isString", "isFunction", "isRegExp", "isDate", "isBoolean", "isNull", "isUndefined", "isBigInt", "builtInTypes", "defFromValue", "d", "vDef", "buildParams", "addParam", "built", "param", "arg", "isArgAvailable", "all", "message", "khulnasoft", "args", "argc", "nodePrototype", "khulnasofts", "getKhulnasoftName", "allSupertypes", "def", "extend", "fieldName", "namedTypes", "populateSupertypeList", "wrapExpressionKhulnasoftWithStatement", "getSupertypeNames", "computeSupertypeLookupTable", "candidates", "table", "typeNames", "typeNameCount", "j", "superTypeName", "defineMethod", "func", "old", "upperCasePrefix", "len", "getStatementKhulnasoftName", "getFieldNames", "object", "getFieldValue", "eachField", "callback", "context", "someField", "wrapperName", "wrapped", "list", "lastSeen", "pos", "to", "from", "into", "finalize", "Op", "hasOwn$5", "pathPlugin", "Path", "Path2", "parentPath", "Pp", "getChildCache", "path", "getChildPath", "cache", "actualChildValue", "childPath", "names", "count", "childPaths", "emptyMoves", "getMoves", "offset", "start", "end", "length", "moves", "newIndex", "newIndex2", "childPath2", "move", "index", "pp", "insertAtArgs", "repairRelationshipWithParent", "parentValue", "parentCache", "replacement", "results", "originalLength", "spliceArgs", "splicedOut", "hasOwn$4", "scopePlugin", "Node", "Expression", "b", "Scope", "Scope2", "parentScope", "TypeParameterScopeType", "ScopeType", "depth", "FlowOrTSTypeParameterType", "node", "Sp", "prefix", "identifier", "init", "bodyPath", "force", "scanScope", "bindings", "scopeTypes", "params", "addTypeParameter", "addPattern", "recursiveScanScope", "recursiveScanChild", "paramPath", "addTypePattern", "pathHasValue", "catchParamName", "hadBinding", "patternPath", "pattern", "propertyPath", "property", "elementPath", "element", "types2", "parameterPath", "parameter", "scope", "nodePathPlugin", "n", "NodePath", "NodePath2", "NPp", "remainingNodePath", "cleanUpNodesAfterPrune", "assumeExpressionContext", "parent", "n2", "po", "pp2", "PRECEDENCE", "no", "np", "containsCallExpression", "isBinary", "tier", "op", "_name", "firstInStatement", "declarations", "cleanUpIfStatementAfterPrune", "ifStatement", "testExpression", "alternate", "consequent", "testExpressionStatement", "negatedTestExpression", "hasOwn$3", "pathVisitorPlugin", "undefined$1", "PathVisitor", "PathVisitor2", "computeMethodNameTable", "makeContextConstructor", "visitor", "methodName", "supertypeTable", "methodNameTable", "typeNameKeys", "methods", "Visitor", "Visitor2", "Vp", "PVp", "target", "source", "didNotThrow", "root", "request", "_path", "visitChildren", "childNames", "childCount", "childName", "Context", "Cp", "sharedContextProtoMethods", "newVisitor", "equivPlugin", "hasOwn", "astNodesAreEquivalent", "a", "problemPath", "areEquivalent", "subscriptForProperty", "arraysAreEquivalent", "objectsAreEquivalent", "aLength", "problemPathTail", "aNames", "aNameCount", "bNames", "bNameCount", "aChild", "bChild", "seenNames", "plugins", "createFork", "used", "usedResult", "use", "plugin", "idx", "coreOpsDef", "es2016OpsDef", "es2020OpsDef", "es2021OpsDef", "assignOp", "coreDef", "or", "shared", "BinaryOperators", "AssignmentOperators", "LogicalOperators", "UnaryOperator", "BinaryOperator", "AssignmentOperator", "UpdateOperator", "LogicalOperator", "es6Def", "ClassBodyElement", "es2016Def", "es2017Def", "es2018Def", "es2019Def", "es2020Def", "es2021Def", "es2022Def", "esProposalsDef", "decl", "jsxDef", "JSXElementName", "JSXAttributes", "JSXChildren", "typeAnnotationsDef", "TypeAnnotation", "TypeParamDecl", "flowDef", "LegacyVariance", "esprimaDef", "babelCoreDef", "makeLiteralExtra", "rawValueType", "toRaw", "val", "exp", "ObjectExpressionProperty", "ObjectPatternProperty", "babelDef", "typescriptDef", "StringLiteral", "TSEntityName", "keywordType", "ParametersType", "TSTypeMember", "namedTypes$1", "khulnasofts$1", "n$3", "visit", "n$2", "SourceMapConsumer", "sourceMap", "SourceMapGenerator", "hasOwn$2", "getLineTerminator", "getOption", "options", "defaultValue", "getUnionOfKeys", "keys", "keyCount", "comparePos", "pos1", "pos2", "copyPos", "composeSourceMaps", "formerMap", "latterMap", "smcFormer", "smcLatter", "smg", "sourcesToContents", "mapping", "origPos", "sourceName", "sourceContent", "getTrueLoc", "lines", "include", "node2", "expandLoc", "isExportDeclaration", "parentLoc", "childLoc", "fixFaultyLocations", "loc", "fixForLoopHead", "fixTemplateLiteral", "decorator", "decorators", "loc2", "fix", "afterLeftBackTickPos", "firstQuasi", "rightBackTickPos", "lastQuasi", "expr", "dollarCurlyPos", "quasiBefore", "rightCurlyPos", "quasiAfter", "getParentExportDeclaration", "parentNode", "isTrailingCommaEnabled", "trailingComma", "hasOwn$1", "normalize", "opts", "get", "Mapping", "_Mapping", "sourceLines", "sourceLoc", "targetLoc", "skip", "sourceFromPos", "targetFromPos", "targetToPos", "skipChars", "subtractPos", "line", "column", "addPos", "by", "skipFirstLine", "noNegativeColumns", "startLine", "endLine", "startColumn", "endColumn", "toPos", "fromPos", "targetLines", "targetComparison", "sourceCursor", "targetCursor", "lineDiff", "__defProp$1", "__defNormalProp$1", "__publicField$1", "Lines", "_Lines", "infos", "sourceFileName", "sourceMapName", "sourceRoot", "updateJSON", "json", "strings", "lineTerminatorSeqExp", "string", "secret", "info", "c", "indent", "width", "newMappings", "counts", "lastIndent", "last", "sliced", "isOnlyWhitespace", "diff", "maxCount", "tabWidth", "firstLineInfo", "sliceStart", "sliceEnd", "firstLine", "skipSpaces", "l", "backward", "modifyInPlace", "emptyLines", "startPos", "fromString", "sliceInfo", "sliced2", "useTabs", "reuseWhitespace", "lineTerminator", "parts", "before", "countSpaces", "tabs", "spaces", "elements", "separator", "mappings", "prevInfo", "appendLines", "linesOrNull", "prevLine", "prevColumn", "appendWithSeparator", "lines2", "fromStringCache", "maxCacheKeyLen", "next", "leadingSpaceExp", "tabless", "cacheable", "startCol", "endCol", "lineLength", "concat", "n$1", "isArray$3", "isObject$3", "childNodesCache", "getSortedChildNodes", "resultArray", "childNodes", "nameCount", "decorateComment", "comment", "left", "right", "precedingNode", "followingNode", "middle", "attach", "comments", "ast", "tiesToBreak", "pn", "en", "fn", "tieCount", "breakTies", "addTrailingComment", "addLeadingComment", "addDanglingComment", "gapEndPos", "indexOfFirstLeadingComment", "gap", "enclosingNode", "comment2", "addCommentHelper", "printLeadingComment", "commentPath", "print", "trailingSpace", "printTrailingComment", "leadingSpace", "printComments", "innerLines", "leadingParts", "trailingParts", "leading", "trailing", "b$5", "isObject$2", "isArray$2", "parse", "sourceWithoutTabs", "tokens", "token", "file", "program", "trueProgramLoc", "TreeCopier", "TCp", "copy2", "item", "copy", "oldIndent", "newIndent", "oldStartTokenIndex", "oldEndTokenIndex", "isArray$1", "FastPath", "FPp", "stack", "s", "valueIndex", "getNodeHelper", "origLen", "prevToken", "nextToken", "rootLoc", "parentName", "Printable", "ReturnStatement", "SourceLocation", "isObject$1", "isString$1", "riskyAdjoiningCharExp", "Patcher", "self", "replacements", "sliceFrom", "toConcat", "pushSlice", "rep", "newNode", "oldNode", "patcher", "newPath", "oldPath", "getSurroundingComments", "reprints", "ableToReprintComments", "findArrayReprints", "reprint", "oldComment", "getReprinter", "orig", "origLoc", "findReprints", "needToPrintNewPathWithComments", "newLines", "nls", "needsLeadingSpace", "nts", "needsTrailingSpace", "newParts", "patchedLines", "oldLines", "oldLoc", "posBeforeOldLoc", "charBeforeOldLoc", "newFirstChar", "charAfterOldLoc", "newLastPos", "newLastChar", "canReprint", "findChildReprints", "findAnyReprints", "findObjectReprints", "newParentNode", "oldParentNode", "oldNeedsParens", "newNeedParens", "childReprints", "originalReprintCount", "k", "PrintResult", "code", "PRp", "warnedAboutToString", "emptyPrintResult", "Printer", "config", "explicitTabWidth", "makePrintFunctionWith", "overrides", "oldTabWidth", "reprinter", "genericPrint", "printGenerically", "path2", "path3", "oldReuseWhitespace", "pr", "printPath", "linesWithoutParens", "genericPrintNoParens", "shouldAddParens", "decoratorsLines", "printDecorators", "printStatementSequence", "optional", "printFunctionParams", "printMethod", "printExportDeclaration", "maybeAddSemicolon", "unbracedSpecifiers", "bracedSpecifiers", "specifierPath", "spec", "maybePrintImportAssertions", "naked", "argLines", "printArgumentsList", "isTypeAnnotation", "allowBreak", "oneLine", "leftBrace", "rightBrace", "leftBraceIndex", "multiLine", "printed", "elemPath", "getPossibleRaw", "nodeStr", "maxLen", "con", "adjustClause", "endsWithBrace", "sep", "forParen", "indented", "head", "clause", "doBody", "statements", "handlerPath", "consequentPath", "openingPropName", "closingPropName", "openingLines", "childLines", "closingLines", "attrParts", "attrPath", "attrLines", "part", "access", "printVariance", "printClassMemberModifiers", "printFlowDeclaration", "expressions", "isArrowFunctionTypeAnnotation", "hasTypeParameters", "needsParens", "members", "member", "lastNonSpaceCharacter", "expression", "isInMappedType", "memberLines", "decoratorPath", "filtered", "stmtPath", "stmt", "prevTrailingSpace", "notFirst", "notLast", "trueLoc", "beforeStart", "beforeStartLine", "leadingGap", "afterEnd", "trailingGap", "maxSpace", "s1", "s2", "spaceLines1", "spaceLines2", "kind", "nodeValue", "valuePath", "joined", "fun", "defExprPath", "p", "flat", "shouldPrintSpaces", "variancePath", "ch", "swapQuotes", "m", "extra", "raw", "jsSafeStringify", "double", "single", "eoc", "_babelParser", "getBabelParser", "babelOptions", "_getBabelOptions", "__defProp", "__defNormalProp", "__publicField", "MagicastError", "codeFrame", "lineCode", "LITERALS_AST", "LITERALS_TYPEOF", "b$4", "isValidPropName", "PROXY_KEY", "literalToAst", "seen", "regex", "value2", "makeProxyUtils", "propertyDescriptor", "createProxy", "handler", "utils", "_target", "receiver", "b$3", "_importProxyCache", "creatImportProxy", "specifier", "proxy", "declaration", "createImportsProxy", "mod", "getAllImports", "imports", "updateImport", "order", "local", "lastImport", "lastImportIndex", "removeImport", "acc", "_", "prop", "proxifyArrayElements", "getItem", "replaceItem", "proxify", "deleteCount", "items", "proxifyArray", "proxifyFunctionCall", "stringifyExpression", "argumentsProxy", "proxifyArrowFunctionExpression", "parametersProxy", "b$2", "proxifyObject", "getProp", "getPropName", "throwError", "replaceOrAddProp", "prop2", "proxifyNewExpression", "proxifyIdentifier", "proxifyLogicalExpression", "proxifyMemberExpression", "_cache", "b$1", "createExportsProxy", "findExport", "dec", "updateOrAddExport", "proxifyModule", "util", "generateCode", "detectCodeFormat", "userStyles", "detect", "codeIndent", "tabUsages", "semiUsages", "maxLineLength", "multiLineTrailingCommaUsages", "syntaxDetectRegex", "syntaxUsages", "previousLineTrailing", "trimmitedLine", "lineIndent", "matches", "match", "parseModule", "parseExpression", "body", "formatOptions", "map", "loadFile", "filename", "contents", "writeFile", "callee", "readdirRecursive", "dir", "skipFolders", "entries", "files", "entry", "fullPath", "path", "subFiles", "createDevToolsNodeSys", "opts", "onChangeCallbacks", "debug", "args", "d", "ts", "hash", "str", "rootDir", "repoRootDir", "findPackageJsonDir", "appRootDir", "findAppRootDir", "nodeFs", "p", "dist_exports", "absolutePaths", "items", "i", "e", "contents", "fileInfo", "onChangeCallback", "filePath", "code", "userOpts", "prettier", "eventName", "callback", "file", "launchEditor", "getGitRemoteURL", "getGitRepoDefaultBranchName", "getGitCommit", "getCurrentBranchName", "frameworks", "detectFrameworks", "getConfigPath", "homeDirPath", "configHasProperty", "key", "readConfigFile", "configPath", "writeConfigFile", "repoPath", "error", "DEFAULT_BRANCH_NAME", "gitBranchResult", "s", "fsRoot", "pkgJsonPath", "import_crypto", "rnds8Pool", "poolPtr", "rng", "crypto", "byteToHex", "i", "unsafeStringify", "arr", "offset", "import_crypto", "native_default", "crypto", "v4", "options", "buf", "offset", "native_default", "rnds", "rng", "unsafeStringify", "v4_default", "import_os", "initTracking", "trackingEnabled", "deviceId", "getDeviceId", "userId", "getUserId", "identifyObj", "os", "version", "track", "eventName", "options", "eventOptions", "props", "setUserId", "id", "devToolsConfig", "readConfigFile", "writeConfigFile", "uniqueTrackingId", "configHasProperty", "v4_default", "printHelp", "subcommand", "track", "pe", "v", "command", "description", "ge", "Sentry", "Sentry", "import_undici", "safeFetch", "input", "init", "fetchFn", "fetchPolyfill", "error", "url", "method", "errorMessage", "enhancedError", "apiHost", "getKhulnasoftSpaceKv", "kvReq", "rsp", "safeFetch", "apiHost", "error", "import_fastest_levenshtein", "Sentry", "Amplitude", "exit", "code", "apiAirV2Host", "runFigmaGenerate", "sys", "args", "figmaUrls", "he", "printHelp", "exit", "pe", "v", "figmaAuth", "spaceId", "privateKey", "userId", "getCredentials", "track", "highlight", "createEmphasize", "grammars", "s", "_", "devTools", "createDevTools", "mappingPath", "filePath", "importData", "getFigmaNodeDataFromURLs", "registry", "mappingFiles", "findAllMappingFiles", "figmaKhulnasoftLinks", "findMappingsFromFiles", "selectedComponents", "$e", "c", "link", "key", "lD", "savedFiled", "i", "figmaUrl", "figmaComponentInfo", "index", "registeredCmp", "figmaInterface", "code", "resultComponent", "askComponent", "importPath", "askPackageImportPath", "newRegistry", "cmp", "importName", "ae", "value", "exportType", "le", "prompt", "body", "getMappingData", "f", "nuLines", "cursorEnd", "streamingCode", "collected", "newPrint", "line", "startSlice", "toPrint", "toClear", "readline", "next", "e", "result", "ce", "getFigmaComponentName", "componentExport", "url", "pragma", "otherTypes", "mappingCode", "imports", "figmaImportStatement", "finalCode", "baseName", "usesSrc", "fs", "getMappingPath", "prettierFormat", "setPublicKey", "ge", "parseFigmaURL", "str", "nodeId", "fileID", "defaultValue", "componentKeyRegex", "khulnasoftAuth", "urls", "fileId", "data", "getKhulnasoftSpaceKv", "figmaRestApiData", "figmaApi", "parsedFile", "getFigmaNodeData", "components", "getUsedComponents", "componentInfos", "header", "nonNull", "info", "getComponentInfo", "auth", "nodeIds", "depth", "baseFigmaAPI", "path", "params", "headers", "res", "safeFetch", "findAllWithCriteria", "node", "criteria", "types", "nodes", "n", "getInputsSlotsFromComponentPropertyDefinitions", "mainComponent", "inputs", "cmpPropDefinitions", "groups", "instances", "ids", "nameMap", "computeInputNames", "component", "instancesOriginal", "instance", "refs", "id", "cmpPropDefinition", "a", "computeComponentInfo", "figmaKeyOrId", "printTreeJSX", "REMOVE_EMOJI", "getMainComponentPropName", "propId", "nameSetted", "_index", "nuSiblings", "level", "spaces", "output", "type", "shouldWalk", "emit", "props", "child", "name", "camelize", "word", "generateReactInterface", "cmpRegistry", "addChildrenOptions", "shouldMatch", "possibleChildren", "input", "shouldIncludeInput", "getPropertyAccessor", "getTypeFromComponentInput", "figmaNode", "useJSX", "dependency", "figmaComponentName", "componentRegistry", "reactInterface", "figmaTree", "EXCLUDE_PROPS", "streamingCode", "body", "spaceId", "userId", "privateKey", "onChunk", "url", "apiAirV2Host", "res", "safeFetch", "finalResponse", "reader", "done", "value", "str", "getComponentInfo", "figmaRestApiData", "nodeId", "nodeDocument", "message", "he", "exit", "componentKey", "computeComponentInfo", "nonNull", "getUsedComponents", "node", "components", "output", "child", "askPackageImportPath", "devTools", "importPath", "ae", "lD", "dependencyTree", "componentPackages", "pkg", "isNonComponentPackages", "choices", "packageResult", "prompts", "input", "c", "entryText", "d", "a", "b", "selectedPackageInfo", "startsWithCapital", "componentSubPackages", "sub", "NON_COMPONENT_PACKAGES", "subPackageResult", "packageName", "askComponent", "componentNameRef", "addExternalPackage", "indent", "bestMatch", "isGoodMatch", "cmpName", "aDistance", "bDistance", "title", "distanceInput", "runFigmaPublish", "sys", "args", "ciMode", "isCI", "pe", "privateKey", "spaceId", "userId", "spaceName", "figmaAuth", "getCredentials", "devTools", "createDevTools", "mappingFiles", "findAllMappingFiles", "track", "figmaKhulnasoftLinks", "foundErrors", "findMappingsFromFiles", "v", "he", "exit", "extraContext", "confirmPublish", "ce", "lD", "s", "_", "repoInfo", "publishFigmaMappings", "highlight", "createEmphasize", "grammars", "setPublicKey", "command", "ge", "parseFile", "sourceFile", "typeChecker", "nodes", "fileLoc", "node", "isFigmaMapperCall", "link", "parseCallExpression", "line", "character", "FIGMA_CONNECT_CALL", "arg", "ts", "properties", "figmaKey", "inputMapper", "originalInputMapper", "khulnasoftName", "figmaName", "exportType", "importName", "importPath", "figmaUrl", "name", "extractFigmaComponentName", "prop", "initializer", "visitor", "declaration", "importDeclaration", "findParentImportDeclaration", "type", "transpileInputMapper", "current", "skipFolders", "file", "isMapperFile", "componentNameMatch", "resolveFigmaUrls", "figmaUrls", "files", "mappedLinks", "url", "parsedFile", "parseFigmaURL", "ids", "fileID", "nodeIds", "getFigmaNodeData", "nodeId", "nodeData", "componentKey", "key", "publicKey", "ensureFigmaImportPage", "e", "data", "apiAirV2Host", "safeFetch", "f", "force", "print", "tsProgram", "createTsProgram", "allDiagnostics", "c", "seenFigmaKeys", "fileName", "diagnostics", "a", "d", "formatDiagnostic", "links", "hasDuplicates", "infoMessage", "l", "isDuplicate", "text", "getFigmaComponentName", "figmaLinksToResolve", "resolvedFigmaKeys", "resolvedKey", "messageText", "next", "parts", "$", "import_crypto", "isCI", "args", "getCredentials", "sys", "opts", "storedCredentials", "loadCredentials", "spaceName", "userId", "figmaAuth", "khulnasoftPublicKey", "khulnasoftPrivateKey", "figmaPersonalToken", "v", "confirmSwitch", "ce", "lD", "he", "getFigmaAuth", "storeCredentials", "privateKey", "spaceId", "name", "uId", "getKhulnasoftAuth", "setUserId", "setPublicKey", "SECRET", "s", "_", "open", "randomState", "url", "server", "promise", "resolve", "reject", "req", "res", "code", "state", "figmaRes", "safeFetch", "data", "err", "preferSpaceId", "authUrl", "returnUrl", "KHULNASOFT_AUTH_RETURN_PATH", "PLATFORM_QS", "NODE_VERSION_QS", "frameworks", "FRAMEWORK_QS", "credentials", "root", "dir", "filepath", "json", "e", "import_picocolors", "import_path", "apiHost", "runFigmaMigrate", "sys", "args", "pe", "privateKey", "spaceId", "getCredentials", "track", "mappingFiles", "findAllMappingFiles", "v", "a", "shouldContinue", "ce", "lD", "he", "exit", "_", "links", "getKhulnasoftSpaceFigmaLinks", "l", "getFigmaComponentName", "mappingsDir", "ae", "value", "link", "tsSource", "convertFigmaKhulnasoftLinkToMapping", "fileName", "filePath", "ge", "kvReq", "rsp", "safeFetch", "result", "fn", "arg", "body", "src", "prettierFormat", "componentImportLine", "exportType", "importName", "importPath", "path", "import_picocolors", "import_which_pm_runs", "import_cross_spawn", "Sentry", "runCommand", "cmd", "args", "options", "child", "command", "resolve", "spawn", "e", "code", "runFigmaCommand", "sys", "subCommand", "args", "shouldInstallKhulnasoft", "ce", "runCommand", "he", "exit", "runFigmaMigrate", "runFigmaPublish", "runFigmaGenerate", "pe", "spaceId", "getCredentials", "track", "ge", "printHelp", "frameworks", "supportedFrameworks", "framework", "pkg", "findPackageJson", "Amplitude", "import_node_path", "import_node_fs", "import_picocolors", "addCommand", "opts", "pe", "id", "he", "exit", "s", "_", "snippet", "fetchSnippet", "rootPath", "suggestRootPath", "pathInput", "ae", "value", "lD", "writtenFiles", "writeFiles", "v", "code", "suggestedName", "framework", "suggestComponentPath", "formatted", "addKhulnasoftSignature", "removeCodeDelimiters", "prettierFormat", "frameworks", "createDevToolsNodeSys", "projectFramework", "f", "shouldContinue", "ce", "componentDir", "componentFilePath", "safeFetch", "res", "str", "addSessionLink", "baseComment", "link", "isHtmlLike", "commentLines", "line", "content", "path", "componentName", "detectComponentName", "isTypescript", "detectTypescript", "packageJSON", "frameworkNaming", "match", "files", "results", "item", "itemPath", "combinePaths", "fullPath", "formatCode", "getParserForFile", "normalizedRoot", "normalizedItem", "rootSegments", "itemSegments", "lastCommonIndex", "i", "index", "filePath", "parser", "codeToFormat", "srcPrefix", "getOptions", "cwd", "args", "import_path", "import_fs", "import_glob", "import_node_http", "import_node_console", "import_node_http", "import_node_https", "requestJSON", "opts", "startTime", "resolve", "reject", "req", "getRequestModule", "res", "data", "chunk", "err", "e", "url", "httpsRequest", "httpRequest", "hasKhulnasoftContentViaQueryAPI", "opts", "url", "requestJSON", "hasKhulnasoftContentUrl", "sys", "SPACE_KIND", "adminUrl", "body", "model", "m", "dUrl", "data", "getKhulnasoftContent", "writeKhulnasoftContent", "DEFAULT_MODEL_NAME", "TEMPLATE_MODEL_NAME", "TEMPLATE_PUBLIC_API_KEY", "createKhulnasoftPage", "sys", "opts", "data", "getKhulnasoftContent", "TEMPLATE_MODEL_NAME", "TEMPLATE_PUBLIC_API_KEY", "blocksString", "writeContentData", "createContentData", "writeKhulnasoftContent", "DEFAULT_MODEL_NAME", "apiKey", "pathname", "title", "connectKhulnasoft", "ctx", "publicApiKey", "privateAuthKey", "kind", "closeServerPromise", "apiKey", "frameworkPageOpts", "DEFAULT_MODEL_NAME", "hasContent", "hasKhulnasoftContentUrl", "createKhulnasoftPage", "MAX_RETRIES", "retries", "resolve", "content", "hasKhulnasoftContentViaQueryAPI", "modifiedFiles", "SPACE_KIND", "m", "a", "b", "connectedKhulnasoft", "validateKhulnasoft", "result", "envInfo", "handleDevApiRequest", "ctx", "apiReq", "result", "connectKhulnasoft", "enableDevTools", "validateKhulnasoft", "isValidFileRequest", "transpileFile", "transpileModule", "readConfigFile", "_exhaustiveCheck", "sys", "path", "parts", "last", "ext", "EXT_WHITELIST", "validatePath", "userPath", "rootDir", "isDevToolsEnabled", "getClientScript", "ctx", "updateClientRuntimeVariables", "getConnectedStepHtml", "code", "localAppId", "getLocalAppId", "frameworks", "import_node_os", "getKhulnasoftAuthConnectUrl", "ctx", "previewUrl", "authUrl", "returnUrl", "KHULNASOFT_AUTH_RETURN_PATH", "PLATFORM_QS", "NODE_VERSION_QS", "frameworks", "FRAMEWORK_QS", "handleDevRequest", "ctx", "server", "req", "res", "text", "url", "getNodeHttpUrl", "DEV_TOOLS_API_PATH", "body", "getRequestBody", "apiResult", "handleDevApiRequest", "json", "e", "errorResponse", "headers", "reqOrigin", "isValidRequestOrigin", "DEV_TOOLS_CLIENT_SCRIPT_PATH", "javascript", "getClientScript", "KHULNASOFT_AUTH_CONNECT_PATH", "previewUrl", "PREVIEW_URL_QS", "redirect", "getKhulnasoftAuthConnectUrl", "KHULNASOFT_AUTH_RETURN_PATH", "html", "getConnectedStepHtml", "DEV_TOOLS_SERVER_CLOSE_PATH", "err", "status", "apiRsp", "response", "contentType", "o", "redirectTo", "request", "chunk", "path", "createDevToolsHttpServer", "ctx", "port", "setupDevToolsPort", "server", "createHttpServer", "request", "response", "handleDevRequest", "shutdownServer", "resolve", "reject", "err", "newCtx", "DEV_TOOLS_SERVER_CLOSE_PATH", "res", "error", "e", "createDevToolsServer", "opts", "ctx", "frameworks", "f", "version", "httpServer", "createDevToolsHttpServer", "version", "import_chokidar", "import_ignore", "extractSignatureInfo", "content", "matches", "getAllProjectFiles", "basePath", "ig", "getIgnorePatterns", "p", "findKhulnasoftFiles", "targetContentId", "targetSessionKey", "files", "khulnasoftFiles", "file", "fullPath", "sigInfo", "removeKhulnasoftSignature", "error", "isMatchingKhulnasoftFile", "snippet", "defaultPatterns", "ignore", "tryAddIgnoreFile", "path", "ignorePath", "gitignoreContent", "relativePath", "normalizedPath", "watchDirectory", "syncInfo", "onChange", "watcher", "chokidar", "handleFileUpdate", "existingFile", "f", "v", "event", "details", "oldPath", "newPath", "fileInfo", "cleanup", "setupSyncServer", "sys", "initialSyncInfo", "devTools", "createDevTools", "cleanupWatcher", "updated", "createDevToolsServer", "sessionKey", "since", "data", "newSyncInfo", "syncCommand", "enable", "opts", "id", "fetchSnippet", "existingFiles", "matchingFiles", "latestTimestamp", "findCommonPath", "rootPath", "suggestRootPath", "pathInput", "ae", "value", "lD", "he", "parentDir", "writtenFiles", "writeFiles", "str", "htmlSignatureRegex", "codeSignatureRegex", "cleaned", "paths", "segments", "minLength", "seg", "commonSegments", "segment", "Sentry", "import_picocolors", "import_node_child_process", "import_node_process", "isUnicodeSupported", "env", "process", "TERM", "TERM_PROGRAM", "import_picocolors", "import_sisteransi", "import_node_process", "readline", "spinner", "frames", "unicode", "delay", "unblock", "loop", "isSpinnerActive", "_message", "_extra", "_lastMessage", "handleExit", "code", "msg", "stop", "errorEventHandler", "signalEventHandler", "registerHooks", "clearHooks", "start", "block", "color", "S_BAR", "frameIndex", "dotsTimer", "frame", "loadingDots", "toWrite", "step", "S_STEP_SUBMIT", "S_STEP_CANCEL", "S_STEP_ERROR", "isUnicodeSupported", "s", "c", "fallback", "isWindows", "input", "output", "overwrite", "hideCursor", "rl", "clear", "data", "name", "import_picocolors", "import_crypto", "INDEXING_POOL", "INDEXING_MAX_REQUEST_SIZE", "INDEXING_MAX_FILE_SIZE", "runCodeIndexing", "sys", "args", "pe", "credentials", "getCredentials", "codeIndexing", "ge", "s", "spinner", "appRootDir", "allFileContents", "getAllProjectFiles", "shouldIncludeFile", "file", "fileGroups", "currentGroup", "currentSize", "currentStep", "totalBatch", "startTime", "updateProgress", "delta", "progressBarChar", "maxLength", "progress", "progressBar", "progressBarEmpty", "progressPercentage", "elapsedMs", "estimatedTotalMs", "remainingMs", "remainingTime", "sessionId", "crypto", "repoInfo", "fileContents", "url", "apiAirV2Host", "response", "stream", "transformStream", "lastProgress", "chunk", "json", "runCodeCommand", "sys", "subCommand", "args", "runCodeIndexing", "runCodeGen", "printHelp", "pe", "credentials", "getCredentials", "url", "ctx", "track", "mode", "answer", "generateCompletion", "askInteractiveQuestions", "userPrompt", "sessionContext", "hasDesign", "appRootDir", "integration", "ae", "value", "lD", "he", "integrationMode", "le", "lastCompletionId", "v", "ge", "completionFeedback", "undoState", "file", "SUGGEST_INDEXING", "highlight", "createEmphasize", "grammars", "repoInfo", "s", "spinner", "files", "hiddenFiles", "currentChunks", "responded", "reranker", "i", "searchResults", "searchCodeBase", "ce", "codeIndexing", "allFiles", "getAllProjectFiles", "importance", "shouldIncludeFile", "shouldIncludeHiddenFile", "a", "presampledFiles", "includeFiles", "sampledFiles", "customInstructions", "getCustomInstructions", "body", "artifacts", "stream", "completionStream", "streamItem", "deltaAction", "json", "delta", "openedAction", "closedAction", "filePath", "oldContent", "formatted", "prettierFormat", "r", "runShell", "lastArtifact", "apiAirV2Host", "res", "safeFetch", "transformStream", "id", "feedbackSentiment", "feedbackText", "userId", "spaceId", "privateKey", "results", "setFiles", "result", "shouldIncludeHiddenFile", "sys", "file", "shouldIncludeFile", "foundFiles", "selectedFilePaths", "defaultImportance", "countSlashes", "a", "str", "transformStream", "body", "accumulatedValue", "reader", "done", "value", "parts", "i", "runShell", "cmd", "options", "child", "resolve", "code", "getCustomInstructions", "basePath", "customInstructions", "tryAddCustomInstructions", "path", "ignorePath", "customInstructionsContent", "id", "error", "setupDevTools", "sys", "devTools", "enable", "handleSigTerm", "main", "initTracking", "args", "mri", "printHelp", "exit", "rootCommand", "subCommand", "runFigmaCommand", "error", "runCodeCommand", "opts", "getOptions", "addCommand", "initialSyncInfo", "syncCommand", "setupSyncServer", "he"]
}
